cirneco 0.8.6 → 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
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>