cirneco 0.8.6 → 0.8.7

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -3
  3. data/Gemfile.lock +3 -3
  4. data/lib/cirneco/doi.rb +9 -21
  5. data/lib/cirneco/utils.rb +55 -25
  6. data/lib/cirneco/version.rb +1 -1
  7. data/spec/api_spec.rb +1 -1
  8. data/spec/doi_spec.rb +8 -7
  9. data/spec/fixtures/index-minted.html +271 -0
  10. data/spec/fixtures/index.html +1 -1
  11. data/spec/fixtures/index.html.erb +42 -0
  12. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/get/should_get_all_dois_by_prefix.yml +14 -2
  13. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_for_all_urls.yml +42 -7
  14. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_for_url.yml +2 -2
  15. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_metadata_for_work.yml +2 -2
  16. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_and_hide_for_all_urls.yml +142 -4
  17. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_and_hide_for_url.yml +4 -4
  18. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_for_all_urls.yml +142 -4
  19. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_for_url.yml +4 -4
  20. data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_post_metadata_for_work.yml +4 -4
  21. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_all_dois.yml +14 -2
  22. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_doi.yml +2 -2
  23. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/put/should_put_doi.yml +2 -2
  24. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/hides_a_doi.yml +2 -2
  25. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_a_doi.yml +4 -4
  26. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_and_hides_a_doi.yml +4 -4
  27. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_and_hides_dois_for_list_of_urls.yml +142 -4
  28. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_dois_for_list_of_urls.yml +142 -4
  29. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_all_dois.yml +14 -2
  30. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi.yml +2 -2
  31. data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/put/should_put_doi.yml +2 -2
  32. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/get/should_get_media.yml +2 -2
  33. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/post/should_post_media.yml +2 -2
  34. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/delete/should_delete_metadata.yml +2 -2
  35. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/get/should_get_metadata.yml +2 -2
  36. data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/post/should_post_metadata.yml +2 -2
  37. data/spec/utils_spec.rb +63 -13
  38. metadata +4 -3
  39. data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/hides_dois_for_list_of_urls.yml +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d25a0884369e841925bac38f6bbeb3b7790d48c
4
- data.tar.gz: 6408f829c40940f06ce392354aec25ebc8e60585
3
+ metadata.gz: f31aa95c4a43e1374ff505a52fe6a812576f4b6e
4
+ data.tar.gz: 7ec6ab0d1ade494caf4e5844d1c6e3dcb033ea44
5
5
  SHA512:
6
- metadata.gz: 1a750ad1c2f9396cc6eb200783d141159538e4fe815804a0ffdbcf2c8a279dda426d52997afb7e9d17d66ca56b699998e94f91e5d79537002a9348c38cb350cd
7
- data.tar.gz: 485343087a69b16061854e02ceaab1f620a7f035c75d1b0a796056d03d48fd65b14cc43cacf091f0aa870a4c008272ebf15bde69a88adc52660dccd1d55fb1b9
6
+ metadata.gz: 4c02aabc718588da40567d5d7bf8a290e956e8ea2cc580e42aa7fbc93d8b5cf5c59f2b172ebae941a53f4dfcde3e49882704c236e180f5b8fbaaaa68523ecdad
7
+ data.tar.gz: 13362e8c0cc37c13725aa173bbc05ee83a68e05b63238b6b63557fd80ef7d77b5351c7b94f1dbfd19d2ee37a65d0d963ada43139d7d409faaa08b20ee33e2a3f
data/.travis.yml CHANGED
@@ -6,9 +6,6 @@ before_install:
6
6
  - wget https://github.com/jgm/pandoc/releases/download/1.15.2/pandoc-1.15.2-1-amd64.deb
7
7
  - sudo dpkg -i pandoc-1.15.2-1-amd64.deb
8
8
  - rm pandoc-1.15.2-1-amd64.deb
9
- - sudo add-apt-repository ppa:kalakris/cmake -y
10
- - sudo apt-get update -q
11
- - sudo apt-get install cmake -y
12
9
 
13
10
  install:
14
11
  - travis_retry bundle install
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cirneco (0.8.6)
4
+ cirneco (0.8.7)
5
5
  activesupport (~> 4.2, >= 4.2.5)
6
6
  base32-crockford-checksum (~> 0.2.2)
7
7
  bergamasco (~> 0.3)
@@ -52,7 +52,7 @@ GEM
52
52
  json (1.8.3)
53
53
  loofah (2.0.3)
54
54
  nokogiri (>= 1.5.9)
55
- maremma (3.1)
55
+ maremma (3.1.1)
56
56
  activesupport (~> 4.2, >= 4.2.5)
57
57
  builder (~> 3.2, >= 3.2.2)
58
58
  excon (~> 0.45.0)
@@ -122,4 +122,4 @@ DEPENDENCIES
122
122
  webmock (~> 1.22, >= 1.22.3)
123
123
 
124
124
  BUNDLED WITH
125
- 1.12.5
125
+ 1.13.6
data/lib/cirneco/doi.rb CHANGED
@@ -105,6 +105,8 @@ module Cirneco
105
105
  method_option :sitepath, :default => ENV['SITE_SITEPATH']
106
106
  method_option :authorpath, :default => ENV['SITE_AUTHORPATH']
107
107
  method_option :referencespath, :default => ENV['SITE_REFERENCESPATH']
108
+ method_option :source_dir
109
+ method_option :index_dir
108
110
  method_option :csl, :default => ENV['SITE_CSLPATH']
109
111
  method_option :number, :aliases => '-n'
110
112
  method_option :username, :default => ENV['MDS_USERNAME']
@@ -112,13 +114,7 @@ module Cirneco
112
114
  method_option :prefix, :default => ENV['PREFIX']
113
115
  method_option :sandbox, :type => :boolean, :force => false
114
116
  def mint(url)
115
-
116
- if url.is_a?(Array)
117
- response = mint_dois_for_all_urls(url, options)
118
- else
119
- response = mint_doi_for_url(url, options)
120
- end
121
-
117
+ response = mint_dois_for_all_urls(url, options)
122
118
  puts response
123
119
  end
124
120
 
@@ -126,6 +122,8 @@ module Cirneco
126
122
  method_option :sitepath, :default => ENV['SITE_SITEPATH']
127
123
  method_option :authorpath, :default => ENV['SITE_AUTHORPATH']
128
124
  method_option :referencespath, :default => ENV['SITE_REFERENCESPATH']
125
+ method_option :source_dir
126
+ method_option :index_dir
129
127
  method_option :csl, :default => ENV['SITE_CSLPATH']
130
128
  method_option :number, :aliases => '-n'
131
129
  method_option :username, :default => ENV['MDS_USERNAME']
@@ -133,13 +131,7 @@ module Cirneco
133
131
  method_option :prefix, :default => ENV['PREFIX']
134
132
  method_option :sandbox, :type => :boolean, :force => false
135
133
  def mint_and_hide(url)
136
-
137
- if url.is_a?(Array)
138
- response = mint_and_hide_dois_for_all_urls(url, options)
139
- else
140
- response = mint_and_hide_doi_for_url(url, options)
141
- end
142
-
134
+ response = mint_and_hide_dois_for_all_urls(url, options)
143
135
  puts response
144
136
  end
145
137
 
@@ -147,19 +139,15 @@ module Cirneco
147
139
  method_option :sitepath, :default => ENV['SITE_SITEPATH']
148
140
  method_option :authorpath, :default => ENV['SITE_AUTHORPATH']
149
141
  method_option :referencespath, :default => ENV['SITE_REFERENCESPATH']
142
+ method_option :source_dir
143
+ method_option :index_dir
150
144
  method_option :csl, :default => ENV['SITE_CSLPATH']
151
145
  method_option :bibliography, :default => ENV['SITE_REFERENCESPATH']
152
146
  method_option :username, :default => ENV['MDS_USERNAME']
153
147
  method_option :password, :default => ENV['MDS_PASSWORD']
154
148
  method_option :sandbox, :type => :boolean, :force => false
155
149
  def hide(url)
156
-
157
- if url.is_a?(Array)
158
- response = hide_dois_for_all_urls(url, options)
159
- else
160
- response = hide_doi_for_url(url, options)
161
- end
162
-
150
+ response = hide_dois_for_all_urls(url, options)
163
151
  puts response
164
152
  end
165
153
  end
data/lib/cirneco/utils.rb CHANGED
@@ -103,68 +103,66 @@ module Cirneco
103
103
 
104
104
  # fetch schema.org metadata in JSON-LD format to mint DOI
105
105
  def mint_doi_for_url(url, options={})
106
- filename = File.basename(url)
107
- source_path = options[:source_path] || "/"
108
- filepath = Dir.pwd + source_path + filename + ".md"
106
+ filename, build_path, source_path = filepath_from_url(url, options)
109
107
 
110
- metadata = generate_metadata_for_work(url, options)
108
+ metadata = generate_metadata_for_work(build_path, options)
111
109
  return "DOI #{metadata["doi"]} not changed for #{filename}" if metadata["doi"] && metadata["date_issued"]
112
110
 
113
111
  response = post_metadata_for_work(metadata, options)
114
112
  return "Errors for DOI #{metadata["doi"]}: #{response.body['errors'].first['title']}\n" if response.body['errors']
115
113
 
116
- new_metadata = Bergamasco::Markdown.update_file(filepath, "doi" => metadata["doi"], "published" => true)
114
+ new_metadata = Bergamasco::Markdown.update_file(source_path, "doi" => metadata["doi"], "published" => true)
117
115
  "DOI #{new_metadata["doi"]} minted for #{filename}"
118
116
  end
119
117
 
120
118
  # fetch schema.org metadata in JSON-LD format to mint DOI
121
119
  def mint_and_hide_doi_for_url(url, options={})
122
- filename = File.basename(url)
123
- source_path = options[:source_path] || "/"
124
- filepath = Dir.pwd + source_path + filename + ".md"
120
+ filename, build_path, source_path = filepath_from_url(url, options)
125
121
 
126
- metadata = generate_metadata_for_work(url, options)
122
+ metadata = generate_metadata_for_work(build_path, options)
127
123
  return "DOI #{metadata["doi"]} not changed for #{filename}" if metadata["doi"] && metadata["date_issued"]
128
124
 
129
125
  response = post_metadata_for_work(metadata, options)
130
126
  return "Errors for DOI #{metadata["doi"]}: #{response.body['errors'].first['title']}\n" if response.body['errors']
131
127
 
132
- new_metadata = Bergamasco::Markdown.update_file(filepath, "doi" => metadata["doi"], "published" => false)
128
+ new_metadata = Bergamasco::Markdown.update_file(source_path, "doi" => metadata["doi"], "published" => false)
133
129
  "DOI #{new_metadata["doi"]} minted and hidden for #{filename}"
134
130
  end
135
131
 
136
132
  # fetch schema.org metadata in JSON-LD format to mint DOI
137
133
  # DOIs are never deleted, but we can remove the metadata from the DataCite index
138
134
  def hide_doi_for_url(url, options={})
139
- filename = File.basename(url)
140
- source_path = options[:source_path] || "/"
141
- filepath = Dir.pwd + source_path + filename + ".md"
135
+ filename, build_path, source_path = filepath_from_url(url, options)
142
136
 
143
- metadata = generate_metadata_for_work(url, options)
144
- return "DOI #{metadata["doi"]} not changed for #{filename}" unless metadata["doi"] && metadata["date_issued"]
137
+ metadata = generate_metadata_for_work(build_path, options)
138
+ return "No DOI for #{filename}" unless metadata["doi"]
139
+ return "DOI #{metadata["doi"]} not active for #{filename}" unless metadata["date_issued"]
145
140
 
146
141
  response = hide_metadata_for_work(metadata, options)
147
142
  return "Errors for DOI #{metadata["doi"]}: #{response.body['errors'].first['title']}\n" if response.body['errors']
148
143
 
149
- new_metadata = Bergamasco::Markdown.update_file(filepath, "published" => false)
144
+ new_metadata = Bergamasco::Markdown.update_file(source_path, "published" => false)
150
145
  "DOI #{metadata["doi"]} hidden for #{filename}"
151
146
  end
152
147
 
153
- def mint_dois_for_all_urls(urls, options={})
154
- urls.map do |url|
155
- mint_doi_for_url(url, options)
148
+ def mint_dois_for_all_urls(url, options={})
149
+ urls = get_urls_for_works(url)
150
+ urls.map do |u|
151
+ mint_doi_for_url(u, options)
156
152
  end.join("\n")
157
153
  end
158
154
 
159
- def mint_and_hide_dois_for_all_urls(urls, options={})
160
- urls.map do |url|
161
- mint_and_hide_doi_for_url(url, options)
155
+ def mint_and_hide_dois_for_all_urls(url, options={})
156
+ urls = get_urls_for_works(url)
157
+ urls.map do |u|
158
+ mint_and_hide_doi_for_url(u, options)
162
159
  end.join("\n")
163
160
  end
164
161
 
165
- def hide_dois_for_all_urls(urls, options={})
166
- urls.map do |url|
167
- hide_doi_for_url(url, options)
162
+ def hide_dois_for_all_urls(url, options={})
163
+ urls = get_urls_for_works(url)
164
+ urls.map do |u|
165
+ hide_doi_for_url(u, options)
168
166
  end.join("\n")
169
167
  end
170
168
 
@@ -331,6 +329,38 @@ module Cirneco
331
329
  end.select { |t| t[:related_identifier_type].present? }
332
330
  end
333
331
 
332
+ def filepath_from_url(url, options={})
333
+ if doi_from_url(url)
334
+ response = Maremma.head(url, limit: 0)
335
+ url = response.headers.fetch("Location", "")
336
+ end
337
+
338
+ uri = Addressable::URI.parse(url.gsub(/\/$/, ""))
339
+ filename = (File.basename(uri.path, ".html").presence || "index") + ".html"
340
+
341
+ if filename == "index.html"
342
+ index_dir = options[:index_dir].presence || "/"
343
+ build_path = Dir.pwd + index_dir + filename
344
+ source_path = build_path + ".erb"
345
+ else
346
+ source_dir = options[:source_dir].presence || "/"
347
+ build_path = Dir.pwd + source_dir + filename
348
+ source_path = build_path + ".md"
349
+ end
350
+ [filename, build_path, source_path]
351
+ end
352
+
353
+ def doi_from_url(url)
354
+ return nil unless url.present?
355
+
356
+ if /(http|https):\/\/(dx\.)?doi\.org\/(\w+)/.match(url)
357
+ uri = Addressable::URI.parse(url)
358
+ uri.path[1..-1].upcase
359
+ elsif url.starts_with?("doi:")
360
+ url[4..-1].upcase
361
+ end
362
+ end
363
+
334
364
  def orcid_from_url(url)
335
365
  return nil unless url.present?
336
366
 
@@ -1,3 +1,3 @@
1
1
  module Cirneco
2
- VERSION = "0.8.6"
2
+ VERSION = "0.8.7"
3
3
  end
data/spec/api_spec.rb CHANGED
@@ -66,7 +66,7 @@ describe Cirneco::Work, vcr: true, :order => :defined do
66
66
  it 'should get all dois' do
67
67
  response = subject.get_dois(options)
68
68
  dois = response.body["data"]
69
- expect(dois.length).to eq(504)
69
+ expect(dois.length).to eq(516)
70
70
  expect(dois.first).to eq("10.23725/0000-03VC")
71
71
  end
72
72
 
data/spec/doi_spec.rb CHANGED
@@ -17,7 +17,7 @@ describe Cirneco::Doi do
17
17
  let(:csl) { "spec/fixtures/apa.csl" }
18
18
  let(:bibliography) { "spec/fixtures/bibliography.yaml" }
19
19
  let(:api_options) { { username: username, password: password, sandbox: true } }
20
- let(:mint_options) { { username: username, password: password, sandbox: true, source_path: "/spec/fixtures/", csl: csl, bibliography: bibliography } }
20
+ let(:mint_options) { { username: username, password: password, sandbox: true, source_dir: "/spec/fixtures/", index_dir: "/spec/fixtures/", csl: csl, bibliography: bibliography } }
21
21
 
22
22
  describe "MDS DOI API", vcr: true, :order => :defined do
23
23
  context "put" do
@@ -105,20 +105,21 @@ describe Cirneco::Doi do
105
105
  end
106
106
 
107
107
  it 'mints dois for list of urls' do
108
+ filepath = fixture_path + 'index.html'
108
109
  subject.options = mint_options
109
- expect { subject.mint [filepath] }.to output("DOI 10.5072/0000-03VC minted for #{filename}\n").to_stdout
110
+ expect { subject.mint filepath }.to output("DOI 10.5072/0000-03VC minted for cool-dois.html\nDOI 10.5072/0000-00SS minted for index.html\n").to_stdout
110
111
  end
111
112
 
112
113
  it 'hides dois for list of urls' do
113
- filename = 'cool-dois-minted.html'
114
- filepath = fixture_path + filename
115
- subject.options = mint_options.merge(filepath: filepath)
116
- expect { subject.hide [filepath] }.to output("DOI 10.5072/0000-03WD hidden for #{filename}\n").to_stdout
114
+ filepath = fixture_path + 'index.html'
115
+ subject.options = mint_options
116
+ expect { subject.hide filepath }.to output("No DOI for cool-dois.html\nNo DOI for index.html\n").to_stdout
117
117
  end
118
118
 
119
119
  it 'mints and hides dois for list of urls' do
120
+ filepath = fixture_path + 'index.html'
120
121
  subject.options = mint_options
121
- expect { subject.mint_and_hide [filepath] }.to output("DOI 10.5072/0000-03VC minted and hidden for #{filename}\n").to_stdout
122
+ expect { subject.mint_and_hide filepath }.to output("DOI 10.5072/0000-03VC minted and hidden for cool-dois.html\nDOI 10.5072/0000-00SS minted and hidden for index.html\n").to_stdout
122
123
  end
123
124
  end
124
125
  end
@@ -0,0 +1,271 @@
1
+
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <!-- (1) Optimize for mobile versions: http://goo.gl/EOpFl -->
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <!-- (1) force latest IE rendering engine: bit.ly/1c8EiC9 -->
9
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
10
+
11
+
12
+ <title>DataCite Blog</title>
13
+ <meta name="description" content="The DataCite Blog" />
14
+
15
+ <meta name="HandheldFriendly" content="True" />
16
+ <meta name="MobileOptimized" content="320" />
17
+ <meta name="apple-mobile-web-app-capable" content="yes">
18
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
19
+
20
+ <!-- DublinCore Metadata -->
21
+ <meta property="dc:title" content="DataCite Blog" />
22
+ <meta property="dc:format" content="text/html" />
23
+ <meta property="dc:language" content="en" />
24
+ <meta property="dc:rights" content="CC-BY" />
25
+ <meta property="dc:source" content="DataCite Blog" />
26
+ <meta property="dc:subject" content="Scholarly Communication" />
27
+ <meta property="dc:type" content="website" />
28
+
29
+
30
+ <meta property="og:site_name" content="DataCite Blog" />
31
+ <meta property="og:description" content="The DataCite Blog" />
32
+ <meta property="og:image" content="/images/datacite.png" />
33
+ <meta property="og:type" content="blog" />
34
+
35
+ <link href="//fonts.googleapis.com/css?family=Libre+Baskerville:400,400i,700" rel="stylesheet">
36
+ <link href='//fonts.googleapis.com/css?family=Raleway:400,600,400italic,600italic' rel='stylesheet' type='text/css'>
37
+ <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type='text/css'>
38
+ <link href="//assets.datacite.org/stylesheets/datacite.css" rel='stylesheet' type='text/css'>
39
+
40
+ <link href="/images/favicon.ico" rel="icon" type="image/ico" />
41
+
42
+ <script
43
+ src="//d2wy8f7a9ursnm.cloudfront.net/bugsnag-2.min.js"
44
+ data-apikey="c37a5861967091a9b42a1a77e235114a">
45
+ </script>
46
+
47
+ <script type="application/ld+json">
48
+ {"@context":"http://schema.org","@type":"Blog","@id":"https://doi.org/10.5072/0000-NW90","name":"DataCite Blog","alternateName":"MS-25-1785","url":"https://blog.datacite.org/","author":[{"@type":"Person","@id":"http://orcid.org/0000-0002-9300-5278","givenName":"Patricia","familyName":"Cruse","name":"Trisha Cruse"},{"@type":"Person","@id":"http://orcid.org/0000-0001-5952-7630","givenName":"Laura","familyName":"Rueda","name":"Laura Rueda"},{"@type":"Person","@id":"http://orcid.org/0000-0003-3484-6875","givenName":"Kristian","familyName":"Garza","name":"Kristian Garza"},{"@type":"Person","@id":"http://orcid.org/0000-0003-1419-2405","givenName":"Martin","familyName":"Fenner","name":"Martin Fenner"}],"publisher":{"@type":"Organization","name":"DataCite"},"dateCreated":"2015-08-03","datePublished":"2015-08-03","dateModified":"2015-08-03","version":"1.0","description":"The DataCite blog.","license":"https://creativecommons.org/licenses/by/4.0/","hasPart":[{"@type":"BlogPosting","@id":"https://doi.org/10.5438/55E5-T5C0","name":"Cool DOI's","datePublished":"2016-12-15"}]}
49
+ </script>
50
+ </head>
51
+ <body>
52
+
53
+ <!-- header start -->
54
+
55
+ <div class="header" id="navtop">
56
+ <div class="navbar navbar-default navbar-static-top" role="navigation">
57
+ <div class="container-fluid">
58
+ <div class="navbar-header"
59
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
60
+ <span class="sr-only">Toggle navigation</span>
61
+ <span class="icon-bar"></span>
62
+ <span class="icon-bar"></span>
63
+ <span class="icon-bar"></span>
64
+ </button>
65
+ <a class="navbar-brand" href="/">DataCite Blog</a>
66
+ </div>
67
+ <div class="navbar-collapse collapse">
68
+ <ul class="nav navbar-nav navbar-right">
69
+ <li class="dropdown">
70
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="support">Support <span class="caret"></a>
71
+ <ul class="dropdown-menu" role="menu">
72
+ <li><a href="mailto:support@datacite.org">Email</a></li>
73
+ <li><a href="https://github.com/datacite/blog">Source Code</a></li>
74
+ </ul>
75
+ </li>
76
+ <li class="dropdown">
77
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="sites"><i class='fa fa-th'></i> <span class="caret"></span></a>
78
+ <ul class="dropdown-menu" role="menu">
79
+ <li>
80
+ <a href='https://api.datacite.org'>
81
+ <i class='fa fa-cogs fa-fw'></i>
82
+ API
83
+ </a>
84
+ </li>
85
+ <li>
86
+ <a href='https://blog.datacite.org'>
87
+ <i class='fa fa-rss fa-fw'></i>
88
+ Blog
89
+ </a>
90
+ </li>
91
+ <li>
92
+ <a href='http://citation.crosscite.org'>
93
+ <i class='fa fa-file-text-o fa-fw'></i>
94
+ Citation Formatter
95
+ </a>
96
+ </li>
97
+ <li>
98
+ <a href='https://data.datacite.org'>
99
+ <i class='fa fa-repeat fa-fw'></i>
100
+ Content Resolver
101
+ </a>
102
+ </li>
103
+ <li>
104
+ <a href='https://www.datacite.org'>
105
+ <i class='fa fa-globe fa-fw'></i>
106
+ Homepage
107
+ </a>
108
+ </li>
109
+ <li>
110
+ <a href='https://mds.datacite.org'>
111
+ <i class='fa fa-database fa-fw'></i>
112
+ MDS
113
+ </a>
114
+ </li>
115
+ <li>
116
+ <a href='https://oai.datacite.org'>
117
+ <i class='fa fa-table fa-fw'></i>
118
+ OAI-PMH
119
+ </a>
120
+ </li>
121
+ <li>
122
+ <a href='https://profiles.datacite.org'>
123
+ <i class='fa fa-user fa-fw'></i>
124
+ Profiles
125
+ </a>
126
+ </li>
127
+ <li>
128
+ <a href='https://schema.datacite.org'>
129
+ <i class='fa fa-file-code-o fa-fw'></i>
130
+ Schema
131
+ </a>
132
+ </li>
133
+ <li>
134
+ <a href='https://search.datacite.org'>
135
+ <i class='fa fa-search fa-fw'></i>
136
+ Search
137
+ </a>
138
+ </li>
139
+ <li>
140
+ <a href='https://stats.datacite.org'>
141
+ <i class='fa fa-bar-chart fa-fw'></i>
142
+ Statistics
143
+ </a>
144
+ </li>
145
+ <li>
146
+ <a href='http://status.datacite.org'>
147
+ <i class='fa fa-calendar-check-o fa-fw'></i>
148
+ Status
149
+ </a>
150
+ </li>
151
+ </ul>
152
+ </li>
153
+ </ul>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </div>
158
+
159
+ <!-- header end -->
160
+
161
+ <div class="container-fluid">
162
+ <div class="row">
163
+ <div class='col-md-8'>
164
+ <div class="search-wide">
165
+ <form action="/index.html" method="get" id="search-form" class="form-horizontal" role="form" data-site-url="https://blog.datacite.org" data-search-url="https://api.datacite.org">
166
+ <div class="input-group">
167
+ <input type="text" id="query" name="query" placeholder="Search blog" class="form-control">
168
+ <div class="input-group-btn">
169
+ <button type="submit" class="btn btn-primary hidden-xs">Search</button>
170
+ </div>
171
+ </div>
172
+ </form>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ <div id="content"></div>
177
+ <div class="row">
178
+ <div class='col-md-4 post-list' id="left-col">
179
+ </div>
180
+ <div class='col-md-4 post-list' id="right-col">
181
+ </div>
182
+ <div class='col-md-3 col-md-offset-1'>
183
+ <div id="tags"/>
184
+ </div>
185
+ </div></div>
186
+ <div class="row">
187
+ <div class='col-md-8' id="pager"></div>
188
+ </div>
189
+ </div>
190
+
191
+ <!-- footer start -->
192
+
193
+ <footer class='row footer'>
194
+ <div class="container-fluid">
195
+ <div class='col-md-3 col-sm-4'>
196
+ <h4>About DataCite</h4>
197
+ <ul>
198
+ <li><a href="https://www.datacite.org/mission.html">What we do</a></a></li>
199
+ <li><a href="https://www.datacite.org/board.html">Board</a></a></li>
200
+ <li><a href="https://www.datacite.org/steering.html">Steering groups</a></a></li>
201
+ <li><a href="https://www.datacite.org/staff.html">Staff</a></a></li>
202
+ <li><a href="https://www.datacite.org/jobopportunities.html">Job opportunities</a></a></li>
203
+ </ul>
204
+ </div>
205
+ <div class='col-md-3 col-sm-4'>
206
+ <h4>Services</h4>
207
+ <ul>
208
+ <li><a href="https://www.datacite.org/dois.html">Assign DOIs</a></a></li>
209
+ <li><a href="https://www.datacite.org/search.html">Metadata search</a></a></li>
210
+ <li><a href="https://www.datacite.org/eventdata.html">Event data</a></a></li>
211
+ <li><a href="https://www.datacite.org/profiles.html">Profiles</a></a></li>
212
+ <li><a href="https://www.datacite.org/re3data.html">re3data</a></a></li>
213
+ <li><a href="https://www.datacite.org/citation.html">Citation formatter</a></a></li>
214
+ <li><a href="https://www.datacite.org/stats.html">Statistics</a></a></li>
215
+ <li><a href="https://www.datacite.org/service.html">Service status</a></a></li>
216
+ <li><a href="https://www.datacite.org/content.html">Content negotiation</a></a></li>
217
+ <li><a href="https://www.datacite.org/oaipmh.html">OAI-PMH</a></a></li>
218
+ <li><a href="https://www.datacite.org/test.html">Test environment</a></a></li>
219
+ </ul>
220
+ </div>
221
+ <div class='col-md-3 col-sm-4'>
222
+ <h4>Resources</h4>
223
+ <ul>
224
+ <li><a href="https://schema.datacite.org">Metadata schema</a></a></li>
225
+ <li><a href="https://www.datacite.org/technical.html">Technical documentation</a></a></li>
226
+ <li><a href="https://www.datacite.org/outreach.html">Outreach material</a></a></li>
227
+ <li><a href="https://www.datacite.org/events.html">Events</a></a></li>
228
+ </ul>
229
+ <h4>Community</h4>
230
+ <ul>
231
+ <li><a href="https://www.datacite.org/members.html">Members</a></a></li>
232
+ <li><a href="https://www.datacite.org/partners.html">Partners</a></a></li>
233
+ <li><a href="https://www.datacite.org/steering.html">Steering groups</a></a></li>
234
+ <li><a href="https://www.datacite.org/events.html">Events</a></a></li>
235
+ </ul>
236
+ </div>
237
+ <div class='col-md-3'>
238
+ <h4 class="share">Contact us</h4>
239
+ <a href='mailto:support@datacite.org' class="share">
240
+ <i class='fa fa-at'></i>
241
+ </a>
242
+ <a href='https://blog.datacite.org' class="share">
243
+ <i class='fa fa-rss'></i>
244
+ </a>
245
+ <a href='https://twitter.com/datacite' class="share">
246
+ <i class='fa fa-twitter'></i>
247
+ </a>
248
+ <a href='https://www.linkedin.com/company/datacite' class="share">
249
+ <i class='fa fa-linkedin'></i>
250
+ </a>
251
+ <ul class="share">
252
+ <li><a href="https://www.datacite.org/terms.html">Terms and conditions</a></a></li>
253
+ <li><a href="https://www.datacite.org/privacy.html">Privacy policy</a></a></li>
254
+ <li><a href="https://www.datacite.org/acknowledgments.html">Acknowledgements</a></a></li>
255
+ </ul>
256
+ </div>
257
+ </div>
258
+ </div>
259
+
260
+ <!-- footer end -->
261
+
262
+ <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
263
+ <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
264
+ <script src="//assets.datacite.org/javascripts/default.js"></script>
265
+ <script src="/javascripts/readingTime.min.js"></script>
266
+ <script src="/javascripts/index.js"></script>
267
+ <script src="/javascripts/search.js"></script>
268
+ <script id="dsq-count-scr" src="//datacite.disqus.com/count.js" async></script>
269
+
270
+ </body>
271
+ </html>
@@ -45,7 +45,7 @@
45
45
  </script>
46
46
 
47
47
  <script type="application/ld+json">
48
- {"@context":"http://schema.org","@type":"Blog","@id":"https://doi.org/10.5072/5PS5-G3V~","name":"DataCite Blog","url":"https://blog.datacite.org/data-driven-development/","author":[{"@type":"Person","@id":"http://orcid.org/0000-0002-9300-5278","givenName":"Patricia","familyName":"Cruse","name":"Trisha Cruse"},{"@type":"Person","@id":"http://orcid.org/0000-0001-5952-7630","givenName":"Laura","familyName":"Rueda","name":"Laura Rueda"},{"@type":"Person","@id":"http://orcid.org/0000-0003-3484-6875","givenName":"Kristian","familyName":"Garza","name":"Kristian Garza"},{"@type":"Person","@id":"http://orcid.org/0000-0003-1419-2405","givenName":"Martin","familyName":"Fenner","name":"Martin Fenner"}],"publisher":{"@type":"Organization","name":"DataCite"},"dateCreated":"2015-08-03","datePublished":"2015-08-03","dateModified":"2015-08-03","version":"1.0","description":"The DataCite blog.","license":"https://creativecommons.org/licenses/by/4.0/","hasPart":[{"@type":"BlogPosting","@id":"https://doi.org/10.5072/CT8B-X1CE","name":"Mysteries in Reference Lists","datePublished":"2016-12-23"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/4K3M-NYVG","name":"Eating your own Dog Food","datePublished":"2016-12-20"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/ZWSF-4Y7Y","name":"2016 in review","datePublished":"2016-12-19"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/55E5-T5C0","name":"Cool DOI's","datePublished":"2016-12-15"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/6WCF-EFW5","name":"A common API for retrieving DataCite Metadata","datePublished":"2016-11-03"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/TNHX-54CG","name":"Announcing the Organization Identifier Project: a Way Forward","datePublished":"2016-11-01"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/ESYS-F867","name":"The Tsinghua University Library joins DataCite","datePublished":"2016-10-24"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/9JWD-TN3A","name":"Welcome United States Geological Survey (USGS)","datePublished":"2016-10-17"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/1YAA-K6D1","name":"DataCite Welcomes TIND","datePublished":"2016-10-14"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/DC13-VP4J","name":"Three things you should know about our new DOI Citation Formatting service","datePublished":"2016-10-13"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/8SZS-1H0H","name":"DataCite’s New Membership Model - Join Us!","datePublished":"2016-10-05"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/VQ3X-QDWT","name":"New DataCite Metadata Schema 4.0","datePublished":"2016-09-21"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/WMAS-KM0V","name":"Software Citation Principles","datePublished":"2016-09-20"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/PRF0-NRXQ","name":"PIDapalooza, the festival of persistent identifiers is coming soon!","datePublished":"2016-09-01"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/Y131-YX9D","name":"Announcing Our New Application Developer","datePublished":"2016-08-24"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/Y4KS-KSBC","name":"Dynamic Data Citation Webinar","datePublished":"2016-07-18"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/X4JQ-EGT5","name":"DataCite Metadata Schema 4.0 Webinar","datePublished":"2016-07-08"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/VQ2T-VR4K","name":"Relaunching DataCite Search","datePublished":"2016-07-05"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/QW2X-PGCY","name":"Our New Website: Dynamic, Responsive and Adapted to your Needs","datePublished":"2016-06-27"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/EA4H-TX3G","name":"DataCite Mandatory Properties","datePublished":"2016-05-20"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/KTR7-ZJJH","name":"Publishing tabular data as blog post","datePublished":"2016-05-20"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/MRR6-MF3Q","name":"Get involved in the DataCite Community!","datePublished":"2016-05-18"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/Q2GH-6EGD","name":"Zotero for Data Repositories Webinar","datePublished":"2016-05-17"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/CAB5-TEG0","name":"Data catalog cards: simplifying article/data linking","datePublished":"2016-05-13"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/4QX3-RP8Y","name":"Thinking about CSV","datePublished":"2016-05-04"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/78P9-FNRN","name":"Tip: Getting data into Impactstory but not your ORCID profile","datePublished":"2016-05-01"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/V909-67A?","name":"DC2AP and DC2RDF Webinar","datePublished":"2016-04-26"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/C3BY-VYZS","name":"We were out in Force","datePublished":"2016-04-19"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/SHR4-2BS2","name":"To better understand research communication, we need a GROID (group object identifier)","datePublished":"2016-04-17"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/PE54-ZJ5T","name":"It's all about Relations","datePublished":"2016-04-14"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/41MH-KSA?","name":"re3data.org Reaches a Milestone and Begins Offering Badges","datePublished":"2016-04-13"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/C81T-HKVP","name":"General Assembly 2016, moving DataCite forward","datePublished":"2016-03-31"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/MSK0-15R2","name":"DataCite is Hiring an Application Developer","datePublished":"2016-03-30"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/BMMQ-YCE9","name":"Dataverse is now minting DOIs with DataCite Metadata Store API","datePublished":"2016-03-30"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/F17B-45VZ","name":"The Location of the Citation: are Data Citation Recommendations Having an Effect?","datePublished":"2016-03-28"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/SS2R-9CNS","name":"Open Science, Open Data and DataCite DOIs","datePublished":"2016-03-11"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/6GEP-3S5E","name":"Enhancements to creating and updating re3data","datePublished":"2016-02-24"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/BZAK-W7E4","name":"DataCite to Dublin Core application profile (DC2AP)","datePublished":"2016-02-18"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/4BY7-B7ZN","name":"New re3data.org Schema and Search Functionality","datePublished":"2016-01-20"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/YHCJ-P5HR","name":"Launching the DataCite Status Page","datePublished":"2016-01-11"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/XCBJ-G7ZY","name":"Announcing the DataCite Blog Relaunch","datePublished":"2015-12-28"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/T0AP-D5W7","name":"Infrastructure Tips for the Non-Profit Startup","datePublished":"2015-12-23"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/CJT2-T6DZ","name":"DataCite Profiles and ORCID Auto-Update webinar","datePublished":"2015-12-05"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/MCNV-GA6N","name":"re3data Webinar and DataCite: En Avant!","datePublished":"2015-11-25"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/15X1-BJ6R","name":"Announcing the DataCite Profiles Service","datePublished":"2015-11-09"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/GA8V-FA94","name":"DataCite Is an Exciting Place to Be","datePublished":"2015-11-02"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/3DFW-Z4KQ","name":"Explaining the DataCite/ORCID Auto-update","datePublished":"2015-10-29"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/FERW-CWHQ","name":"Auto-Update Has Arrived!","datePublished":"2015-10-26"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/1H7N-3CEN","name":"Software Citation Workflows","datePublished":"2015-10-19"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/C61Q-Z2K7","name":"Happy Birthday ORCID","datePublished":"2015-10-16"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/W029-Y6W~","name":"Contributor Information in DataCite Metadata","datePublished":"2015-10-12"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/85SN-MX23","name":"Recap: Persistent Identifiers in Paris","datePublished":"2015-10-04"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/D9EQ-9DGA","name":"Discussing the Scholarly Container","datePublished":"2015-10-02"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/7RXD-S8A3","name":"Thoughts on the Research Data Alliance 6th Plenary","datePublished":"2015-10-01"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/JM9F-325F","name":"Persistent Identifiers: Enabling Services for Data Intensive Research","datePublished":"2015-09-22"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/BC11-CQW1","name":"Differences between ORCID and DataCite Metadata","datePublished":"2015-09-18"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/2WFX-2HZ1","name":"Adding References to the DataCite Blog","datePublished":"2015-09-16"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/JZG5-VCQV","name":"Announcing Data-Level Metrics in DataCite Labs","datePublished":"2015-09-09"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/5HZJ-5KDS","name":"Using YAML Frontmatter with CSV","datePublished":"2015-09-03"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/02BH-TGC7","name":"When Counting is Hard","datePublished":"2015-08-31"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/1HV8-2GC2","name":"Digging into Metadata using R","datePublished":"2015-08-20"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/S8GF-0CK9","name":"From Pilot to Service","datePublished":"2015-08-17"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/5AEG-WEEV","name":"Reference Lists and Tables of Content","datePublished":"2015-08-15"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/8QKH-1R6~","name":"Overcoming Development Pain","datePublished":"2015-08-11"},{"@type":"BlogPosting","@id":"https://doi.org/10.5072/5PS5-G3V~","name":"Data-Driven Development","datePublished":"2015-08-03"}]}
48
+ {"@context":"http://schema.org","@type":"Blog","@id":"https://blog.datacite.org/","name":"DataCite Blog","alternateName":"MS-25-1785","url":"https://blog.datacite.org/","author":[{"@type":"Person","@id":"http://orcid.org/0000-0002-9300-5278","givenName":"Patricia","familyName":"Cruse","name":"Trisha Cruse"},{"@type":"Person","@id":"http://orcid.org/0000-0001-5952-7630","givenName":"Laura","familyName":"Rueda","name":"Laura Rueda"},{"@type":"Person","@id":"http://orcid.org/0000-0003-3484-6875","givenName":"Kristian","familyName":"Garza","name":"Kristian Garza"},{"@type":"Person","@id":"http://orcid.org/0000-0003-1419-2405","givenName":"Martin","familyName":"Fenner","name":"Martin Fenner"}],"publisher":{"@type":"Organization","name":"DataCite"},"dateCreated":"2015-08-03","datePublished":"2015-08-03","dateModified":"2015-08-03","version":"1.0","description":"The DataCite blog.","license":"https://creativecommons.org/licenses/by/4.0/","hasPart":[{"@type":"BlogPosting","@id":"cool-dois.html","name":"Cool DOI's","datePublished":"2016-12-15"}]}
49
49
  </script>
50
50
  </head>
51
51
  <body>