cirneco 0.8.6 → 0.8.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -3
- data/Gemfile.lock +3 -3
- data/lib/cirneco/doi.rb +9 -21
- data/lib/cirneco/utils.rb +55 -25
- data/lib/cirneco/version.rb +1 -1
- data/spec/api_spec.rb +1 -1
- data/spec/doi_spec.rb +8 -7
- data/spec/fixtures/index-minted.html +271 -0
- data/spec/fixtures/index.html +1 -1
- data/spec/fixtures/index.html.erb +42 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/get/should_get_all_dois_by_prefix.yml +14 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_for_all_urls.yml +42 -7
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_for_url.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_hide_metadata_for_work.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_and_hide_for_all_urls.yml +142 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_and_hide_for_url.yml +4 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_for_all_urls.yml +142 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_mint_for_url.yml +4 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/mint_and_hide_DOIs/should_post_metadata_for_work.yml +4 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_all_dois.yml +14 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_doi.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/put/should_put_doi.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/hides_a_doi.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_a_doi.yml +4 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_and_hides_a_doi.yml +4 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_and_hides_dois_for_list_of_urls.yml +142 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/mint_and_hide_DOIs/mints_dois_for_list_of_urls.yml +142 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_all_dois.yml +14 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/put/should_put_doi.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/get/should_get_media.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/post/should_post_media.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/delete/should_delete_metadata.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/get/should_get_metadata.yml +2 -2
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/post/should_post_metadata.yml +2 -2
- data/spec/utils_spec.rb +63 -13
- metadata +4 -3
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f31aa95c4a43e1374ff505a52fe6a812576f4b6e
|
4
|
+
data.tar.gz: 7ec6ab0d1ade494caf4e5844d1c6e3dcb033ea44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
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 =
|
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(
|
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(
|
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 =
|
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(
|
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(
|
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 =
|
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(
|
144
|
-
return "DOI
|
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(
|
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(
|
154
|
-
urls
|
155
|
-
|
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(
|
160
|
-
urls
|
161
|
-
|
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(
|
166
|
-
urls
|
167
|
-
|
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
|
|
data/lib/cirneco/version.rb
CHANGED
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(
|
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,
|
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
|
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
|
-
|
114
|
-
|
115
|
-
subject.
|
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
|
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>
|
data/spec/fixtures/index.html
CHANGED
@@ -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>
|