bolognese 0.6.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +33 -1
  4. data/lib/bolognese.rb +1 -0
  5. data/lib/bolognese/codemeta.rb +145 -0
  6. data/lib/bolognese/crossref.rb +1 -0
  7. data/lib/bolognese/datacite.rb +1 -0
  8. data/lib/bolognese/metadata.rb +18 -0
  9. data/lib/bolognese/schema_org.rb +5 -2
  10. data/lib/bolognese/version.rb +1 -1
  11. data/spec/codemeta_spec.rb +81 -0
  12. data/spec/datacite_spec.rb +16 -0
  13. data/spec/fixtures/codemeta.json +87 -0
  14. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/BlogPosting.yml +7 -329
  15. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Dataset.yml +7 -1759
  16. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Date.yml +7 -331
  17. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Funding_schema_version_3.yml +7 -7
  18. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Funding_schema_version_4.yml +7 -7
  19. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/Schema_org_JSON.yml +7 -7
  20. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/is_identical_to.yml +7 -7
  21. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata/multiple_licenses.yml +7 -7
  22. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_bibtex/BlogPosting.yml +7 -7
  23. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_bibtex/Dataset.yml +7 -7
  24. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_codemeta/SoftwareSourceCode.yml +133 -0
  25. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_datacite_xml_4_0/Dataset.yml +7 -7
  26. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_datacite_xml_4_0/Funding.yml +7 -7
  27. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_string/Dataset.yml +7 -7
  28. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_alternate_identifiers/insert.yml +7 -7
  29. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_contributors/none.yml +7 -7
  30. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_creators/insert.yml +7 -7
  31. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_dates/insert.yml +7 -7
  32. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_descriptions/insert.yml +7 -7
  33. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_identifier/doi.yml +7 -7
  34. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_person/creator_only_name.yml +7 -7
  35. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_publication_year/insert.yml +7 -7
  36. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_publisher/insert.yml +7 -7
  37. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/insert.yml +7 -7
  38. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/rel_identifiers.yml +7 -7
  39. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_resource_type/insert.yml +7 -7
  40. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_rights_list/insert.yml +7 -7
  41. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_subjects/insert.yml +7 -7
  42. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_titles/insert.yml +7 -7
  43. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_version/insert.yml +7 -7
  44. data/spec/schema_org_spec.rb +2 -2
  45. metadata +6 -9
  46. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_contributors/insert.yml +0 -173
  47. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_person/creator.yml +0 -173
  48. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_person/creator_given_and_family_name.yml +0 -173
  49. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/get_related_identifier_type.yml +0 -173
  50. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/get_related_identifier_type_DOI.yml +0 -173
  51. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_related_identifiers/get_related_identifier_type_URL.yml +0 -173
  52. data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/insert_titles/doi.yml +0 -173
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4cf9b774c122a31d80d29bac90783498458f5aff
4
- data.tar.gz: 970db12ff440f5907609eaabbac07676b06fe1e6
3
+ metadata.gz: 510d880a02cea7933abd7de597f9a4061dad981b
4
+ data.tar.gz: 754fa0b49a23494efa1cac66c99688313bbaafca
5
5
  SHA512:
6
- metadata.gz: 14b38895e972a549842ec6a1f7388f4f2bd5dff742860689d189a15702843ef3babb1b6b9ff181faabd626391f2e41abf8825aff596c67b8aa9bc422dcde547d
7
- data.tar.gz: 639783c23011fc7567b9c8397bf214d0dcc89604660297cc77da29fd9a899f17bffd7bd8f142b50ee4c24804246b201f5278fc5bd4f9d2938262038d239f8b28
6
+ metadata.gz: 9899dd154362fea725898b2895664704b1f6cdb7a981fd10225094b29273e467f45c45e545fd966ff06451df107c9625e906438172fac0fc44e55608e96165bb
7
+ data.tar.gz: ba1af6c6cdc58219234ea03e7a989a8eb464fee854fe581ad280465d942db5212113a99e65c23d876e6642c3345d79ff5bdb7ec82c94bbc9a8709acb594eb803
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (0.6.6)
4
+ bolognese (0.7)
5
5
  activesupport (~> 4.2, >= 4.2.5)
6
6
  bibtex-ruby (~> 4.1)
7
7
  builder (~> 3.2, >= 3.2.2)
data/README.md CHANGED
@@ -34,7 +34,7 @@ Bolognese reads and/or writes these metadata formats:
34
34
  <td>application/vnd.datacite.datacite+xml</td>
35
35
  <td>Yes</td>
36
36
  <td>Yes</td>
37
- </tr>
37
+ </tr>
38
38
  <tr>
39
39
  <td><a href='http://schema.org/'>Schema.org in JSON-LD</a></td>
40
40
  <td>schema_org</td>
@@ -42,6 +42,13 @@ Bolognese reads and/or writes these metadata formats:
42
42
  <td>Yes</td>
43
43
  <td>Yes</td>
44
44
  </tr>
45
+ <tr>
46
+ <td><a href='https://codemeta.github.io/'>Codemeta</a></td>
47
+ <td>codemeta</td>
48
+ <td>application/ld+json</td>
49
+ <td>Yes</td>
50
+ <td>Yes</td>
51
+ </tr>
45
52
  <tr>
46
53
  <td><a href='http://en.wikipedia.org/wiki/BibTeX'>BibTeX</a></td>
47
54
  <td>bibtex</td>
@@ -754,6 +761,31 @@ bolognese 10.5061/DRYAD.8515 -t datacite --schema_version http://datacite.org/sc
754
761
  </resource>
755
762
  ```
756
763
 
764
+
765
+ Convert DataCite XML to Codemeta:
766
+
767
+ ```
768
+ bolognese https://doi.org/10.5063/f1m61h5x -t codemeta
769
+
770
+ {
771
+ "@context":"https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
772
+ "@type":"SoftwareSourceCode",
773
+ "@id":"https://doi.org/10.5063/f1m61h5x",
774
+ "identifier":"https://doi.org/10.5063/f1m61h5x",
775
+ "title":"dataone: R interface to the DataONE network of data repositories",
776
+ "agents":{
777
+ "@type":"Person",
778
+ "givenName":"Matthew B.",
779
+ "familyName":"Jones"
780
+ },
781
+ "datePublished":"2016",
782
+ "publisher":{
783
+ "@type":"Organization",
784
+ "name":"KNB Data Repository"
785
+ }
786
+ }
787
+ ```
788
+
757
789
  Convert DataCite XML to BibTeX:
758
790
 
759
791
  ```
data/lib/bolognese.rb CHANGED
@@ -9,6 +9,7 @@ require "bolognese/metadata"
9
9
  require "bolognese/crossref"
10
10
  require "bolognese/datacite"
11
11
  require "bolognese/schema_org"
12
+ require "bolognese/codemeta"
12
13
  require "bolognese/bibtex"
13
14
  require "bolognese/orcid"
14
15
  require "bolognese/cli"
@@ -0,0 +1,145 @@
1
+ module Bolognese
2
+ class Codemeta < Metadata
3
+
4
+ def initialize(id: nil, string: nil)
5
+ id = normalize_id(id) if id.present?
6
+
7
+ if string.present?
8
+ @raw = string
9
+ elsif id.present?
10
+ response = Maremma.get(id, accept: "application/ld+json", raw: true)
11
+ @raw = response.body.fetch("data", nil)
12
+ end
13
+ end
14
+
15
+ alias_method :schema_org, :as_schema_org
16
+ alias_method :bibtex, :as_bibtex
17
+
18
+ def metadata
19
+ @metadata ||= raw.present? ? Maremma.from_json(raw) : {}
20
+ end
21
+
22
+ def exists?
23
+ metadata.present?
24
+ end
25
+
26
+ def doi
27
+ doi_from_url(id)
28
+ end
29
+
30
+ def id
31
+ normalize_id(metadata.fetch("@id", nil) || identifier)
32
+ end
33
+
34
+ def identifier
35
+ metadata.fetch("identifier", nil)
36
+ end
37
+
38
+ def url
39
+ normalize_id(metadata.fetch("codeRepository", nil))
40
+ end
41
+
42
+ def resource_type_general
43
+ SO_TO_DC_TRANSLATIONS[type]
44
+ end
45
+
46
+ def type
47
+ metadata.fetch("@type", nil)
48
+ end
49
+
50
+ def additional_type
51
+ metadata.fetch("additionalType", nil)
52
+ end
53
+
54
+ def bibtex_type
55
+ Bolognese::Bibtex::SO_TO_BIB_TRANSLATIONS[type] || "misc"
56
+ end
57
+
58
+ def name
59
+ metadata.fetch("title", nil)
60
+ end
61
+
62
+ def alternate_name
63
+ metadata.fetch("alternateName", nil)
64
+ end
65
+
66
+ def author
67
+ a = Array.wrap(metadata.fetch("agents", nil)).map { |a| a.extract!("@type", "@id", "name") }
68
+ array_unwrap(a)
69
+ end
70
+
71
+ def editor
72
+ Array(metadata.fetch("editor", nil)).map { |a| a.except("name") }.presence
73
+ end
74
+
75
+ def description
76
+ metadata.fetch("description", nil)
77
+ end
78
+
79
+ def license
80
+ metadata.fetch("license", nil)
81
+ end
82
+
83
+ def version
84
+ metadata.fetch("version", nil)
85
+ end
86
+
87
+ def keywords
88
+ Array(metadata.fetch("tags", nil)).join(", ").presence
89
+ end
90
+
91
+ def date_created
92
+ metadata.fetch("dateCreated", nil)
93
+ end
94
+
95
+ def date_published
96
+ metadata.fetch("datePublished", nil)
97
+ end
98
+
99
+ def date_modified
100
+ metadata.fetch("dateModified", nil)
101
+ end
102
+
103
+ def related_identifiers(relation_type)
104
+ normalize_ids(metadata.fetch(relation_type, nil))
105
+ end
106
+
107
+ def same_as
108
+ related_identifiers("isIdenticalTo")
109
+ end
110
+
111
+ def is_part_of
112
+ related_identifiers("isPartOf")
113
+ end
114
+
115
+ def has_part
116
+ related_identifiers("hasPart")
117
+ end
118
+
119
+ def citation
120
+ related_identifiers("citation")
121
+ end
122
+
123
+ def publisher
124
+ p = metadata.fetch("publisher", nil)
125
+ if p.is_a?(Hash)
126
+ p
127
+ elsif p.is_a?(String)
128
+ { "@type" => "Organization",
129
+ "name" => p }
130
+ end
131
+ end
132
+
133
+ def container_title
134
+ if publisher.is_a?(Hash)
135
+ publisher.fetch("name", nil)
136
+ elsif publisher.is_a?(String)
137
+ publisher
138
+ end
139
+ end
140
+
141
+ def provider
142
+ metadata.fetch("provider", nil)
143
+ end
144
+ end
145
+ end
@@ -74,6 +74,7 @@ module Bolognese
74
74
  alias_method :crossref, :raw
75
75
  alias_method :as_crossref, :raw
76
76
  alias_method :schema_org, :as_schema_org
77
+ alias_method :codemeta, :as_codemeta
77
78
  alias_method :bibtex, :as_bibtex
78
79
 
79
80
  def metadata
@@ -32,6 +32,7 @@ module Bolognese
32
32
  end
33
33
 
34
34
  alias_method :schema_org, :as_schema_org
35
+ alias_method :codemeta, :as_codemeta
35
36
  alias_method :bibtex, :as_bibtex
36
37
 
37
38
  def schema_version
@@ -72,6 +72,24 @@ module Bolognese
72
72
  }.compact.to_json
73
73
  end
74
74
 
75
+ def as_codemeta
76
+ { "@context" => id.present? ? "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld" : nil,
77
+ "@type" => type,
78
+ "@id" => id,
79
+ "identifier" => id,
80
+ "codeRepository" => url,
81
+ "title" => name,
82
+ "agents" => author,
83
+ "description" => description,
84
+ "version" => version,
85
+ "tags" => keywords.to_s.split(", ").presence,
86
+ "dateCreated" => date_created,
87
+ "datePublished" => date_published,
88
+ "dateModified" => date_modified,
89
+ "publisher" => publisher
90
+ }.compact.to_json
91
+ end
92
+
75
93
  def as_bibtex
76
94
  bib = {
77
95
  bibtex_type: bibtex_type.to_sym,
@@ -14,6 +14,7 @@ module Bolognese
14
14
  end
15
15
 
16
16
  alias_method :schema_org, :as_schema_org
17
+ alias_method :codemeta, :as_codemeta
17
18
  alias_method :bibtex, :as_bibtex
18
19
 
19
20
  def metadata
@@ -61,11 +62,13 @@ module Bolognese
61
62
  end
62
63
 
63
64
  def author
64
- Array(metadata.fetch("author", nil)).map { |a| a.except("name") }.presence
65
+ a = Array.wrap(metadata.fetch("author", nil)).map { |a| a.except("name") }
66
+ array_unwrap(a)
65
67
  end
66
68
 
67
69
  def editor
68
- Array(metadata.fetch("editor", nil)).map { |a| a.except("name") }.presence
70
+ a = Array.wrap(metadata.fetch("editor", nil)).map { |a| a.except("name") }
71
+ array_unwrap(a)
69
72
  end
70
73
 
71
74
  def description
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "0.6.6"
2
+ VERSION = "0.7"
3
3
  end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bolognese::Codemeta, vcr: true do
4
+ # let(:id) { "https://blog.datacite.org/eating-your-own-dog-food" }
5
+ let(:fixture_path) { "spec/fixtures/" }
6
+ #
7
+ # subject { Bolognese::SchemaOrg.new(id: id) }
8
+
9
+ # context "get metadata" do
10
+ # it "BlogPosting" do
11
+ # expect(subject.id).to eq("https://doi.org/10.5438/4k3m-nyvg")
12
+ # expect(subject.url).to eq("https://blog.datacite.org/eating-your-own-dog-food")
13
+ # expect(subject.type).to eq("BlogPosting")
14
+ # expect(subject.author).to eq([{"@type"=>"Person", "@id"=>"http://orcid.org/0000-0003-1419-2405", "givenName"=>"Martin", "familyName"=>"Fenner"}])
15
+ # expect(subject.name).to eq("Eating your own Dog Food")
16
+ # expect(subject.alternate_name).to eq("MS-49-3632-5083")
17
+ # expect(subject.description).to start_with("Eating your own dog food")
18
+ # expect(subject.keywords).to eq("datacite, doi, metadata, featured")
19
+ # expect(subject.date_published).to eq("2016-12-20")
20
+ # expect(subject.date_modified).to eq("2016-12-20")
21
+ # expect(subject.is_part_of).to eq("@type"=>"Blog", "@id"=>"https://doi.org/10.5438/0000-00ss", "name"=>"DataCite Blog")
22
+ # expect(subject.citation).to eq([{"@type"=>"CreativeWork", "@id"=>"https://doi.org/10.5438/0012"},
23
+ # {"@type"=>"CreativeWork", "@id"=>"https://doi.org/10.5438/55e5-t5c0"}])
24
+ # expect(subject.publisher).to eq("@type"=>"Organization", "name"=>"DataCite")
25
+ # end
26
+ #
27
+ # it "BlogPosting schema.org JSON" do
28
+ # json = JSON.parse(subject.as_schema_org)
29
+ # expect(json["@id"]).to eq("https://doi.org/10.5438/4k3m-nyvg")
30
+ # end
31
+ #
32
+ # it "not found error" do
33
+ # id = "https://doi.org/10.5438/4K3M-NYVGx"
34
+ # subject = Bolognese::SchemaOrg.new(id: id)
35
+ # expect(subject.id).to be_nil
36
+ # expect(subject.exists?).to be false
37
+ # end
38
+ # end
39
+
40
+ context "get metadata as string" do
41
+ let(:string) { IO.read(fixture_path + 'codemeta.json') }
42
+
43
+ subject { Bolognese::Codemeta.new(string: string) }
44
+
45
+ it "SoftwareSourceCode" do
46
+ expect(subject.id).to eq("https://doi.org/10.5063/f1m61h5x")
47
+ expect(subject.url).to eq("https://github.com/DataONEorg/rdataone")
48
+ expect(subject.type).to eq("SoftwareSourceCode")
49
+ expect(subject.author).to eq([{"@type"=>"person",
50
+ "@id"=>"http://orcid.org/0000-0003-0077-4738",
51
+ "name"=>"Matt Jones"},
52
+ {"@type"=>"person",
53
+ "@id"=>"http://orcid.org/0000-0002-2192-403X",
54
+ "name"=>"Peter Slaughter"},
55
+ {"@type"=>"organization",
56
+ "@id"=>"http://orcid.org/0000-0002-3957-2474",
57
+ "name"=>"University of California, Santa Barbara"}])
58
+ expect(subject.name).to eq("R Interface to the DataONE REST API")
59
+ expect(subject.description).to start_with("Provides read and write access to data and metadata")
60
+ expect(subject.keywords).to eq("data sharing, data repository, DataONE")
61
+ expect(subject.version).to eq("2.0.0")
62
+ expect(subject.date_created).to eq("2016-05-27")
63
+ expect(subject.date_published).to eq("2016-05-27")
64
+ expect(subject.date_modified).to eq("2016-05-27")
65
+ expect(subject.publisher).to eq("@type"=>"Organization", "name"=>"https://cran.r-project.org")
66
+ end
67
+ end
68
+
69
+ context "get metadata as datacite xml" do
70
+ let(:string) { IO.read(fixture_path + 'codemeta.json') }
71
+
72
+ subject { Bolognese::Codemeta.new(string: string) }
73
+
74
+ it "SoftwareSourceCode" do
75
+ expect(subject.validation_errors).to be_empty
76
+ datacite = Maremma.from_xml(subject.as_datacite).fetch("resource", {})
77
+ expect(datacite.dig("titles", "title")).to eq("R Interface to the DataONE REST API")
78
+ expect(datacite.fetch("version")).to eq("2.0.0")
79
+ end
80
+ end
81
+ end
@@ -227,6 +227,22 @@ describe Bolognese::Datacite, vcr: true do
227
227
  end
228
228
  end
229
229
 
230
+ context "get metadata as codemeta" do
231
+ it "SoftwareSourceCode" do
232
+ id = "https://doi.org/10.5063/f1m61h5x"
233
+ subject = Bolognese::Datacite.new(id: id)
234
+ json = JSON.parse(subject.as_codemeta)
235
+ expect(json["@context"]).to eq("https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld")
236
+ expect(json["@id"]).to eq("https://doi.org/10.5063/f1m61h5x")
237
+ expect(json["@type"]).to eq("SoftwareSourceCode")
238
+ expect(json["identifier"]).to eq("https://doi.org/10.5063/f1m61h5x")
239
+ expect(json["agents"]).to eq("@type"=>"Person", "givenName"=>"Matthew B.", "familyName"=>"Jones")
240
+ expect(json["title"]).to eq("dataone: R interface to the DataONE network of data repositories")
241
+ expect(json["datePublished"]).to eq("2016")
242
+ expect(json["publisher"]).to eq("@type"=>"Organization", "name"=>"KNB Data Repository")
243
+ end
244
+ end
245
+
230
246
  context "get metadata as bibtex" do
231
247
  it "Dataset" do
232
248
  bibtex = BibTeX.parse(subject.as_bibtex).to_a(quotes: '').first
@@ -0,0 +1,87 @@
1
+ {
2
+ "@context": "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
3
+ "@type": "SoftwareSourceCode",
4
+ "agents": [{
5
+ "@id": "http://orcid.org/0000-0003-0077-4738",
6
+ "@type": "person",
7
+ "email": "jones@nceas.ucsb.edu",
8
+ "name": "Matt Jones",
9
+ "affiliation": "NCEAS",
10
+ "mustBeCited": true,
11
+ "isMaintainer": true,
12
+ "isRightsHolder": true,
13
+ "role": {
14
+ "namespace": "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode",
15
+ "roleCode": [
16
+ "originator",
17
+ "resourceProvider"
18
+ ]
19
+ }
20
+ }, {
21
+ "@id": "http://orcid.org/0000-0002-2192-403X",
22
+ "@type": "person",
23
+ "email": "slaughter@nceas.ucsb.edu",
24
+ "name": "Peter Slaughter",
25
+ "affiliation": "NCEAS",
26
+ "mustBeCited": true,
27
+ "isMaintainer": false,
28
+ "isRightsHolder": false,
29
+ "role": {
30
+ "namespace": "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode",
31
+ "roleCode": "contributor"
32
+ }
33
+ }, {
34
+ "@id": "http://orcid.org/0000-0002-3957-2474",
35
+ "@type": "organization",
36
+ "email": "info@ucop.edu",
37
+ "name": "University of California, Santa Barbara",
38
+ "role": {
39
+ "namespace": "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode",
40
+ "roleCode": "copyrightHolder"
41
+ }
42
+ }],
43
+ "depends": {
44
+ "@type": "URL",
45
+ "@value": "https://github.com/ropensci/datapack"
46
+ },
47
+ "identifier": "http://dx.doi.org/10.5063/F1M61H5X",
48
+ "codeRepository": "https://github.com/DataONEorg/rdataone",
49
+ "controlledTem": "software",
50
+ "datePublished": "2016-05-27",
51
+ "dateModified": "2016-05-27",
52
+ "dateCreated": "2016-05-27",
53
+ "description": "Provides read and write access to data and metadata from the DataONE network of data repositories.Each DataONE repository implements a consistent repository application programming interface. Users call methods in R to access these remote repository functions, such as methods to query the metadata catalog, get access to metadata for particular data packages, and read the data objects from the data repository.Users can also insert and update data objects on repositories that support these methods.",
54
+ "downloadLink": "https://cran.r-project.org/src/contrib/dataone_2.0.0.tar.gz",
55
+ "funding": "National Science Foundation grant #012345678",
56
+ "isAutomatedBuild": false,
57
+ "issueTracker": "https://github.com/DataONEorg/rdataone/issues",
58
+ "licenseId": "Apache-2.0",
59
+ "publisher": "https://cran.r-project.org",
60
+ "tags": [
61
+ "data sharing",
62
+ "data repository",
63
+ "DataONE"
64
+ ],
65
+ "title": "R Interface to the DataONE REST API",
66
+ "version": "2.0.0",
67
+ "uploadedBy": {
68
+ "@id": "http://orcid.org/0000-0003-0077-4738",
69
+ "@type": "person",
70
+ "email": "mbjones@nceas.ucsb.edu",
71
+ "name": "Matt Jones"
72
+ },
73
+ "programmingLanguage": {
74
+ "name": "R",
75
+ "version": "> 3.1.1",
76
+ "URL": "https://www.r-project.org"
77
+ },
78
+ "readme": "https://github.com/DataONEorg/rdataone/README.md",
79
+ "relatedPublications": "ISBN:0201703726",
80
+ "relationship": {
81
+ "relationshipType": "isPartOf",
82
+ "relatedIdentifier": "urn:uuid:F1A0A7AF-ECF3-4C7D-B675-7C6949963995",
83
+ "relatedIdentifierType": "UUID"
84
+ },
85
+ "softwarePaperCitationIdentifiers": "http://doi.org/0000/0000",
86
+ "zippedCode": "https://cran.r-project.org/src/contrib/dataone_2.0.0.tar.gz"
87
+ }