commonmeta-ruby 3.3.18 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +33 -29
- data/lib/commonmeta/crossref_utils.rb +20 -0
- data/lib/commonmeta/readers/json_feed_reader.rb +19 -1
- data/lib/commonmeta/schema_utils.rb +1 -1
- data/lib/commonmeta/version.rb +1 -1
- data/resources/{commonmeta_v0.9.2.json → commonmeta_v0.9.3.json} +32 -2
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blog_post_with_non-url_id.yml +84 -18
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml +42 -14
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_author_name_suffix.yml +184 -55
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_doi.yml +76 -15
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_institutional_author.yml +33 -12
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_organizational_author.yml +44 -11
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_related_identifiers.yml +366 -0
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_without_doi.yml +144 -11
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post.yml +42 -13
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml +17 -13
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/substack_post_with_broken_reference.yml +557 -262
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/syldavia_gazette_post_with_references.yml +76 -47
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/upstream_post_with_references.yml +303 -123
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post.yml +108 -12
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_many_references.yml +3048 -441
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_references.yml +178 -31
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_tracking_code_on_url.yml +139 -17
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/another_schema_org_from_front-matter.yml +47 -48
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article.yml +5 -5
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article_from_datacite.yml +7 -7
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml +17 -13
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_doi.yml +108 -12
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_organizational_author.yml +44 -11
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_relations.yml +366 -0
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_upstream_blog.yml +200 -11
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_with_references.yml +303 -123
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/posted_content.yml +16 -16
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/schema_org_from_another_science_blog.yml +17 -17
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/schema_org_from_front_matter.yml +111 -113
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/schema_org_from_upstream_blog.yml +64 -57
- data/spec/readers/json_feed_reader_spec.rb +85 -57
- data/spec/writers/crossref_xml_writer_spec.rb +76 -40
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75ab77371ac7823493a9e182a81284ae858bc10ee4d2a1df6dd598518024d645
|
4
|
+
data.tar.gz: 696bccaa9835c5b5f7eefc666051fae1d01b608a4e94286b54630053324779b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f21095312741ed18d18285ca29c836e1dc528dad317ce501beed5413407ce5d4436660298d9b593eda126e6814b45e0154bd10ec7c8f6e2c4f61794c7e097e7
|
7
|
+
data.tar.gz: 7887477aee2ae90f7a8c271be662ae35bf72c82b69df4afcf41e74ded776c8a96bfbc5af4d04839400cdf57151467b69451e5c5d740ea487b194f2b00bb42984
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
commonmeta-ruby (3.
|
4
|
+
commonmeta-ruby (3.4.0)
|
5
5
|
activesupport (>= 4.2.5, < 8.0)
|
6
6
|
addressable (~> 2.8.1, < 2.8.2)
|
7
7
|
base32-url (>= 0.7.0, < 1)
|
@@ -27,7 +27,7 @@ PATH
|
|
27
27
|
GEM
|
28
28
|
remote: https://rubygems.org/
|
29
29
|
specs:
|
30
|
-
activesupport (7.0.
|
30
|
+
activesupport (7.0.7.2)
|
31
31
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
32
32
|
i18n (>= 1.6, < 2)
|
33
33
|
minitest (>= 5.1)
|
@@ -37,6 +37,8 @@ GEM
|
|
37
37
|
ast (2.4.2)
|
38
38
|
base32-url (0.7.0)
|
39
39
|
uuidtools (~> 2.1, >= 2.1.5)
|
40
|
+
base64 (0.1.1)
|
41
|
+
bcp47_spec (0.2.1)
|
40
42
|
bibtex-ruby (6.0.0)
|
41
43
|
latex-decode (~> 0.0)
|
42
44
|
builder (3.2.4)
|
@@ -60,11 +62,11 @@ GEM
|
|
60
62
|
docile (1.4.0)
|
61
63
|
domain_name (0.5.20190701)
|
62
64
|
unf (>= 0.0.5, < 1.0.0)
|
63
|
-
ebnf (2.
|
65
|
+
ebnf (2.4.0)
|
64
66
|
htmlentities (~> 4.3)
|
65
|
-
rdf (~> 3.
|
67
|
+
rdf (~> 3.3)
|
66
68
|
scanf (~> 1.0)
|
67
|
-
sxp (~> 1.
|
69
|
+
sxp (~> 1.3)
|
68
70
|
unicode-types (~> 1.8)
|
69
71
|
edtf (3.1.1)
|
70
72
|
activesupport (>= 3.0, < 8.0)
|
@@ -92,16 +94,16 @@ GEM
|
|
92
94
|
iniparser (1.0.1)
|
93
95
|
json (2.6.3)
|
94
96
|
json-canonicalization (0.3.2)
|
95
|
-
json-ld (3.
|
97
|
+
json-ld (3.3.0)
|
96
98
|
htmlentities (~> 4.3)
|
97
99
|
json-canonicalization (~> 0.3, >= 0.3.2)
|
98
100
|
link_header (~> 0.0, >= 0.0.8)
|
99
101
|
multi_json (~> 1.15)
|
100
102
|
rack (>= 2.2, < 4)
|
101
|
-
rdf (~> 3.
|
102
|
-
json-ld-preloaded (3.
|
103
|
-
json-ld (~> 3.
|
104
|
-
rdf (~> 3.
|
103
|
+
rdf (~> 3.3)
|
104
|
+
json-ld-preloaded (3.3.0)
|
105
|
+
json-ld (~> 3.3)
|
106
|
+
rdf (~> 3.3)
|
105
107
|
json_schemer (1.0.3)
|
106
108
|
hana (~> 1.3)
|
107
109
|
regexp_parser (~> 2.0)
|
@@ -121,12 +123,12 @@ GEM
|
|
121
123
|
crass (~> 1.0.2)
|
122
124
|
nokogiri (>= 1.12.0)
|
123
125
|
matrix (0.4.2)
|
124
|
-
minitest (5.
|
126
|
+
minitest (5.20.0)
|
125
127
|
multi_json (1.15.0)
|
126
128
|
namae (1.1.1)
|
127
|
-
nokogiri (1.15.
|
129
|
+
nokogiri (1.15.4-arm64-darwin)
|
128
130
|
racc (~> 1.4)
|
129
|
-
oj (3.
|
131
|
+
oj (3.16.1)
|
130
132
|
optimist (3.1.0)
|
131
133
|
parallel (1.23.0)
|
132
134
|
parser (3.2.2.3)
|
@@ -145,18 +147,19 @@ GEM
|
|
145
147
|
rack (>= 1.3)
|
146
148
|
rainbow (3.1.1)
|
147
149
|
rake (13.0.6)
|
148
|
-
rdf (3.
|
150
|
+
rdf (3.3.0)
|
151
|
+
bcp47_spec (~> 0.2)
|
149
152
|
link_header (~> 0.0, >= 0.0.8)
|
150
|
-
rdf-rdfxml (3.
|
151
|
-
builder (~> 3.2)
|
153
|
+
rdf-rdfxml (3.3.0)
|
154
|
+
builder (~> 3.2, >= 3.2.4)
|
152
155
|
htmlentities (~> 4.3)
|
153
|
-
rdf (~> 3.
|
154
|
-
rdf-xsd (~> 3.
|
155
|
-
rdf-turtle (3.
|
156
|
-
ebnf (~> 2.
|
157
|
-
rdf (~> 3.
|
158
|
-
rdf-xsd (3.
|
159
|
-
rdf (~> 3.
|
156
|
+
rdf (~> 3.3)
|
157
|
+
rdf-xsd (~> 3.3)
|
158
|
+
rdf-turtle (3.3.0)
|
159
|
+
ebnf (~> 2.4)
|
160
|
+
rdf (~> 3.3)
|
161
|
+
rdf-xsd (3.3.0)
|
162
|
+
rdf (~> 3.3)
|
160
163
|
rexml (~> 3.2)
|
161
164
|
regexp_parser (2.8.1)
|
162
165
|
rexml (3.2.6)
|
@@ -176,7 +179,8 @@ GEM
|
|
176
179
|
rspec-xsd (0.1.0)
|
177
180
|
nokogiri (~> 1.6)
|
178
181
|
rspec (~> 3)
|
179
|
-
rubocop (1.
|
182
|
+
rubocop (1.56.2)
|
183
|
+
base64 (~> 0.1.1)
|
180
184
|
json (~> 2.3)
|
181
185
|
language_server-protocol (>= 3.17.0)
|
182
186
|
parallel (~> 1.10)
|
@@ -193,12 +197,12 @@ GEM
|
|
193
197
|
rubocop (~> 1.41)
|
194
198
|
rubocop-factory_bot (2.23.1)
|
195
199
|
rubocop (~> 1.33)
|
196
|
-
rubocop-performance (1.
|
200
|
+
rubocop-performance (1.19.0)
|
197
201
|
rubocop (>= 1.7.0, < 2.0)
|
198
202
|
rubocop-ast (>= 0.4.0)
|
199
203
|
rubocop-rake (0.6.0)
|
200
204
|
rubocop (~> 1.0)
|
201
|
-
rubocop-rspec (2.23.
|
205
|
+
rubocop-rspec (2.23.2)
|
202
206
|
rubocop (~> 1.33)
|
203
207
|
rubocop-capybara (~> 2.17)
|
204
208
|
rubocop-factory_bot (~> 2.22)
|
@@ -213,9 +217,9 @@ GEM
|
|
213
217
|
simplecov_json_formatter (0.1.4)
|
214
218
|
simpleidn (0.2.1)
|
215
219
|
unf (~> 0.1.4)
|
216
|
-
sxp (1.
|
220
|
+
sxp (1.3.0)
|
217
221
|
matrix (~> 0.4)
|
218
|
-
rdf (~> 3.
|
222
|
+
rdf (~> 3.3)
|
219
223
|
textutils (1.4.0)
|
220
224
|
activesupport
|
221
225
|
logutils (>= 0.6.1)
|
@@ -231,7 +235,7 @@ GEM
|
|
231
235
|
unicode-types (1.8.0)
|
232
236
|
uuidtools (2.2.0)
|
233
237
|
vcr (6.2.0)
|
234
|
-
webmock (3.
|
238
|
+
webmock (3.19.1)
|
235
239
|
addressable (>= 2.8.0)
|
236
240
|
crack (>= 0.3.2)
|
237
241
|
hashdiff (>= 0.4.0, < 2.0.0)
|
@@ -63,6 +63,7 @@ module Commonmeta
|
|
63
63
|
insert_crossref_issn(xml)
|
64
64
|
insert_item_number(xml)
|
65
65
|
insert_crossref_access_indicators(xml)
|
66
|
+
insert_crossref_relations(xml)
|
66
67
|
insert_doi_data(xml)
|
67
68
|
insert_citation_list(xml)
|
68
69
|
end
|
@@ -81,6 +82,7 @@ module Commonmeta
|
|
81
82
|
insert_item_number(xml)
|
82
83
|
insert_crossref_abstract(xml)
|
83
84
|
insert_crossref_access_indicators(xml)
|
85
|
+
insert_crossref_relations(xml)
|
84
86
|
insert_doi_data(xml)
|
85
87
|
insert_citation_list(xml)
|
86
88
|
end
|
@@ -197,6 +199,24 @@ module Commonmeta
|
|
197
199
|
end
|
198
200
|
end
|
199
201
|
|
202
|
+
def insert_crossref_relations(xml)
|
203
|
+
return xml if related_identifiers.blank?
|
204
|
+
|
205
|
+
xml.program("xmlns" => "http://www.crossref.org/relations.xsd",
|
206
|
+
"name" => "relations") do
|
207
|
+
related_identifiers.each do |related_identifier|
|
208
|
+
identifier_type = validate_doi(related_identifier["id"]) ? "doi" : "url"
|
209
|
+
id = identifier_type == "doi" ? doi_from_url(related_identifier["id"]) : related_identifier["id"]
|
210
|
+
attributes = {
|
211
|
+
"relation_type" => related_identifier["type"].camelize(:lower),
|
212
|
+
"identifier_type" => identifier_type,
|
213
|
+
}.compact
|
214
|
+
|
215
|
+
xml.intra_work_relation(id, attributes)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
200
220
|
# def insert_dates(xml)
|
201
221
|
# return xml unless Array.wrap(dates).present?
|
202
222
|
|
@@ -57,11 +57,12 @@ module Commonmeta
|
|
57
57
|
language = meta.fetch("language", nil) || meta.dig("blog", "language")
|
58
58
|
state = id.present? || read_options.present? ? "findable" : "not_found"
|
59
59
|
subjects = Array.wrap(meta.dig("blog", "category")).reduce([]) do |sum, subject|
|
60
|
-
sum += name_to_fos(subject)
|
60
|
+
sum += name_to_fos(subject.underscore.humanize)
|
61
61
|
|
62
62
|
sum
|
63
63
|
end
|
64
64
|
references = get_references(meta)
|
65
|
+
related_identifiers = get_related_identifiers(meta)
|
65
66
|
alternate_identifiers = [{ "alternateIdentifier" => meta["id"], "alternateIdentifierType" => "UUID" }]
|
66
67
|
|
67
68
|
{ "id" => id,
|
@@ -77,6 +78,7 @@ module Commonmeta
|
|
77
78
|
"license" => license,
|
78
79
|
"subjects" => subjects.presence,
|
79
80
|
"references" => references.presence,
|
81
|
+
"related_identifiers" => related_identifiers.presence,
|
80
82
|
"alternate_identifiers" => alternate_identifiers,
|
81
83
|
"state" => state }.compact.merge(read_options)
|
82
84
|
end
|
@@ -103,6 +105,22 @@ module Commonmeta
|
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
108
|
+
def get_related_identifiers(meta)
|
109
|
+
# check that relationships resolve
|
110
|
+
Array.wrap(meta["relationships"]).reduce([]) do |sum, relationship|
|
111
|
+
begin
|
112
|
+
if [200, 301, 302].include? HTTP.head(relationship["url"]).status
|
113
|
+
sum << { "id" => relationship["url"], "type" => relationship["type"] }
|
114
|
+
end
|
115
|
+
rescue => error
|
116
|
+
# puts "Error: #{error.message}"
|
117
|
+
# puts "Error: #{reference}"
|
118
|
+
end
|
119
|
+
|
120
|
+
sum
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
106
124
|
def get_json_feed_unregistered
|
107
125
|
# get JSON Feed items not registered as DOIs
|
108
126
|
|
@@ -5,7 +5,7 @@ require "pathname"
|
|
5
5
|
|
6
6
|
module Commonmeta
|
7
7
|
module SchemaUtils
|
8
|
-
COMMONMETA = File.read(File.expand_path("../../resources/commonmeta_v0.9.
|
8
|
+
COMMONMETA = File.read(File.expand_path("../../resources/commonmeta_v0.9.3.json",
|
9
9
|
__dir__))
|
10
10
|
|
11
11
|
def json_schema_errors
|
data/lib/commonmeta/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
3
|
-
"$id": "https://commonmeta.org/commonmeta_v0.9.
|
4
|
-
"title": "Commonmeta v0.9.
|
3
|
+
"$id": "https://commonmeta.org/commonmeta_v0.9.3.json",
|
4
|
+
"title": "Commonmeta v0.9.3",
|
5
5
|
"description": "JSON representation of the Commonmeta schema.",
|
6
6
|
"additionalProperties": false,
|
7
7
|
"definitions": {
|
@@ -288,6 +288,36 @@
|
|
288
288
|
},
|
289
289
|
"uniqueItems": true
|
290
290
|
},
|
291
|
+
"related_identifiers": {
|
292
|
+
"description": "Other resolvable persistent unique IDs related to the resource.",
|
293
|
+
"type": "array",
|
294
|
+
"items": {
|
295
|
+
"type": "object",
|
296
|
+
"properties": {
|
297
|
+
"id": {
|
298
|
+
"type": "string"
|
299
|
+
},
|
300
|
+
"type": {
|
301
|
+
"type": "string",
|
302
|
+
"enum": [
|
303
|
+
"IsIdenticalTo",
|
304
|
+
"IsNewVersionOf",
|
305
|
+
"IsPreviousVersionOf",
|
306
|
+
"IsPartOf",
|
307
|
+
"HasPart",
|
308
|
+
"IsVariantFormOf",
|
309
|
+
"IsTranslationOf",
|
310
|
+
"IsVersionOf",
|
311
|
+
"IsReviewOf",
|
312
|
+
"IsPreprintOf",
|
313
|
+
"HasPreprint"
|
314
|
+
]
|
315
|
+
}
|
316
|
+
},
|
317
|
+
"required": ["id", "type"]
|
318
|
+
},
|
319
|
+
"uniqueItems": true
|
320
|
+
},
|
291
321
|
"funding_references": {
|
292
322
|
"description": "The funding references for the resource.",
|
293
323
|
"type": "array",
|
@@ -23,13 +23,13 @@ http_interactions:
|
|
23
23
|
Cache-Control:
|
24
24
|
- public, max-age=0, must-revalidate
|
25
25
|
Content-Length:
|
26
|
-
- '
|
26
|
+
- '8527'
|
27
27
|
Content-Type:
|
28
28
|
- application/json; charset=utf-8
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Wed, 06 Sep 2023 14:27:24 GMT
|
31
31
|
Etag:
|
32
|
-
- '"
|
32
|
+
- '"sk275cf3ap6kl"'
|
33
33
|
Server:
|
34
34
|
- Vercel
|
35
35
|
Strict-Transport-Security:
|
@@ -39,7 +39,7 @@ http_interactions:
|
|
39
39
|
X-Vercel-Cache:
|
40
40
|
- MISS
|
41
41
|
X-Vercel-Id:
|
42
|
-
- fra1::iad1::
|
42
|
+
- fra1::iad1::bsggp-1694010443675-85c6731865df
|
43
43
|
Connection:
|
44
44
|
- close
|
45
45
|
body:
|
@@ -49,18 +49,84 @@ http_interactions:
|
|
49
49
|
before sunset in Tucson. Live image below, showing the glorious Santa Catalina
|
50
50
|
mountains (the snow on the upper reaches is more apparent earlier in the day)
|
51
51
|
and my dinner preparations (shrimp and veggies on the grill).I''ve decided
|
52
|
-
to start writing here at Quintessence of Dust
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
52
|
+
to start writing here at <i>Quintessence of Dust</i>, after another long hiatus.","content_html":"It''s
|
53
|
+
early January 2023, a little before sunset in Tucson. Live image below, showing
|
54
|
+
the glorious Santa Catalina mountains (the snow on the upper reaches is more
|
55
|
+
apparent earlier in the day) and my dinner preparations (shrimp and veggies
|
56
|
+
on the grill).<div><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgBx9BU21qMDFnLxgHmnsl6TQVfb3QCwOXrC1zcXq7WH9gN8E0TcH3pTslRBG6O8mb5gcuF9JVtDlJ2je6dFcfyzKE4OD38-ftr66nBxddo892_NkyuevrrX65ndSbwmXMaLh3F5yiqU1QIj8JtA8FLkKOcHOEVwVafz0rzh7PejbFzp3XT25nQxc/s4032/Jan%207.jpg\"><img
|
57
|
+
height=\"320\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgBx9BU21qMDFnLxgHmnsl6TQVfb3QCwOXrC1zcXq7WH9gN8E0TcH3pTslRBG6O8mb5gcuF9JVtDlJ2je6dFcfyzKE4OD38-ftr66nBxddo892_NkyuevrrX65ndSbwmXMaLh3F5yiqU1QIj8JtA8FLkKOcHOEVwVafz0rzh7PejbFzp3XT25nQxc/s320/Jan%207.jpg\"
|
58
|
+
width=\"240\" /></a></div><br /><div><div>I''ve decided to start writing here
|
59
|
+
at <i>Quintessence of Dust</i>, after another long hiatus. Here are some of
|
60
|
+
my reasons.</div><div><br /></div><div>1. I like to write, and I have things
|
61
|
+
to say, and I self-identify as an author. For eight years, I have co-organized
|
62
|
+
and taught in the <a href=\"https://meetings.cshl.edu/courses.aspx?course=C-WRITE&year=23\"
|
63
|
+
target=\"_blank\">Scientific Writing Retreat at Cold Spring Harbor Laboratory</a>.
|
64
|
+
I''m a writer and I need to write, if only for myself.</div><div><br /></div><div>2.
|
65
|
+
I have an idea for a book, along with some introductory work (but no sample
|
66
|
+
chapters yet) and writing here will help me develop those thoughts. The idea
|
67
|
+
is over twelve years old and has never faded away, which I take to mean that
|
68
|
+
I need to get it out of my system somehow.</div><div><br /></div><div>3. I
|
69
|
+
have other ideas kicking around in my head and most of them are worth writing
|
70
|
+
about. I have one new intellectual passion that is totally worth writing about:
|
71
|
+
<a href=\"https://skyislandalliance.org/the-sky-islands/\" target=\"_blank\">the
|
72
|
+
Sky Islands</a> that nearly surround us here in Tucson.</div><div><br /></div><div>4.
|
73
|
+
I have an exciting new job with great new people at <a href=\"https://plos.org/\"
|
74
|
+
target=\"_blank\">an organization</a> that''s all in for <a href=\"https://plos.org/open-science/\"
|
75
|
+
target=\"_blank\">open science</a>. I recently turned over the tens digit
|
76
|
+
on my age-o-meter. My kids will very soon be all out of college. (One is about
|
77
|
+
to start a postdoc!) All of this led, predictably, to a spasm of reflection
|
78
|
+
on projects and vision. One clear result is that I''m feeling more inspired.<span><a
|
79
|
+
name=\"more\"></a></span></div><div><br /></div><div>5. The demise of Twitter
|
80
|
+
has led to a lot of <a href=\"https://www.theatlantic.com/technology/archive/2022/11/twitter-facebook-social-media-decline/672074/\"
|
81
|
+
target=\"_blank\">useful commentary</a> about the nature of social media.
|
82
|
+
I left Facebook two years ago and all but left Twitter two months ago. I''m
|
83
|
+
on a <a href=\"https://fediscience.org/explore\" target=\"_blank\">good server
|
84
|
+
at Mastodon</a> and I like it; maybe microblogging there can satisfy my desire
|
85
|
+
for conversation and connection. But <a href=\"https://www.theverge.com/23513418/bring-back-personal-blogging\"
|
86
|
+
target=\"_blank\">this recent piece</a> at <i>The Verge</i> by <a href=\"https://moniquejudge.com/\"
|
87
|
+
target=\"_blank\">Monique Judge</a> convinced me that blogging could (again)
|
88
|
+
have a place in the future.</div><div><br /><div>Here''s her summary, emphasis
|
89
|
+
mine:</div><div><blockquote>At the end of the day, we don’t know what is going
|
90
|
+
to happen next with Twitter or any of these platforms. We don’t know what
|
91
|
+
changes <a href=\"https://www.techtarget.com/whatis/definition/Web-30\" target=\"_blank\">Web
|
92
|
+
3.0</a> is going to bring to the internet. We do know that <b>we will all
|
93
|
+
still be here, wanting to share our thoughts, talk about anything and everything,
|
94
|
+
and commune with our people</b>. Personal blogging is the simplest and fastest
|
95
|
+
way to do all of that. </blockquote></div><div>That''s what I want! A place
|
96
|
+
to write, and (if I''m lucky) a place to discuss and \"commune\" with people.
|
97
|
+
That used to happen a lot at <i>Quintessence of Dust</i>.<span></span></div></div></div><div><br
|
98
|
+
/></div><div>Okay, but why here? This blog is over 15 years old and was started
|
99
|
+
when I was a Christian believer. <a href=\"https://sfmatheson.blogspot.com/2007/08/kicking-off-my-blog.html\"
|
100
|
+
target=\"_blank\">Its founding themes</a> were anchored in a desire to help
|
101
|
+
Christians understand and enjoy biology, to help them shake free of misinformation
|
102
|
+
and dishonesty. It has twice languished through long hiatuses and was <a href=\"https://sfmatheson.blogspot.com/p/about.html\"
|
103
|
+
target=\"_blank\">remodeled</a> back in 2017 a few years after I deconverted.
|
104
|
+
Maybe it''s time to start anew? I think not, for many of those same reasons:
|
105
|
+
I''m still a biologist who loves science, still worried about misinformation,
|
106
|
+
and still rooted in the power of scientific explanation. I''m still a bardolator
|
107
|
+
and a Red Sox fan. <a href=\"https://sfmatheson.blogspot.com/p/about.html\">I''m
|
108
|
+
still me</a>, and <i>Quintessence of Dust</i> is still my blog. The new <a
|
109
|
+
href=\"https://sfmatheson.blogspot.com/p/about.html\" target=\"_blank\">About
|
110
|
+
page</a> is slightly remodeled from 2017, and hints at the next post, which
|
111
|
+
will outline some new goals and ongoing projects.</div><div><br /></div><div>A
|
112
|
+
final note on inspiration, from Imani Perry, writing in her newsletter (<a
|
113
|
+
href=\"https://newsletters.theatlantic.com/unsettled-territory/\" target=\"_blank\">Unsettled
|
114
|
+
Territory</a>) at <i>The Atlantic</i>. The piece is \"<a href=\"https://newsletters.theatlantic.com/unsettled-territory/63af3facace609003751bacc/becoming-writer-habit-journalism/\"
|
115
|
+
target=\"_blank\">Writing is a Democratic Art</a>.\" It''s for subscribers
|
116
|
+
only but here is her challenge:</div><div><blockquote>Thinking and writing
|
117
|
+
at a faster pace stretched me and gave me greater confidence. Sometimes I
|
118
|
+
changed my mind about what I’d written a day later. But that was okay; a newsletter
|
119
|
+
is a moment in time. Writing it each week gave me a lovely rhythm in what
|
120
|
+
has otherwise been a difficult and disorienting season in history. Feeling
|
121
|
+
stuck can get you stuck. But writing can, and should, inspire deeds.</blockquote></div>","published_at":1673233380,"updated_at":1680470227,"indexed_at":1689006804,"authors":[{"url":null,"name":"Stephen
|
122
|
+
Matheson"}],"image":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgBx9BU21qMDFnLxgHmnsl6TQVfb3QCwOXrC1zcXq7WH9gN8E0TcH3pTslRBG6O8mb5gcuF9JVtDlJ2je6dFcfyzKE4OD38-ftr66nBxddo892_NkyuevrrX65ndSbwmXMaLh3F5yiqU1QIj8JtA8FLkKOcHOEVwVafz0rzh7PejbFzp3XT25nQxc/s320/Jan%207.jpg","tags":["Introduction"],"language":"en","reference":[],"relationships":[],"blog_id":"5764g49","blog_name":"Quintessence
|
123
|
+
of Dust","blog_slug":"sfmatheson","blog":{"id":"5764g49","title":"Quintessence
|
124
|
+
of Dust","description":"<i>Quintessence of Dust</i> explores science, society,
|
125
|
+
and human nature, focusing on genetics, development, evolution, neuroscience,
|
126
|
+
systems biology, and topics related to scientific literacy. I occasionally
|
127
|
+
discuss intelligent design, creationism, science denial, and other political/social
|
128
|
+
influences on scientific literacy. Additional topics: philosophy, baseball,
|
129
|
+
scientific culture, and Shakespeare. My main theme is <b><u>scientific explanation</u></b>.","language":"en","favicon":null,"feed_url":"http://sfmatheson.blogspot.com/feeds/posts/default","home_page_url":"http://sfmatheson.blogspot.com","user_id":"656f9875-3304-4056-935b-b29429e14222","created_at":"2023-04-18","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
|
130
|
+
7.00","category":"socialSciences","prefix":"10.59350","modified_at":"2023-08-17T05:24:17+00:00","version":"https://jsonfeed.org/version/1.1","current_feed_url":null,"status":"active","issn":null,"backlog":0,"authors":null,"plan":"Team","slug":"sfmatheson","use_mastodon":false}}'
|
131
|
+
recorded_at: Wed, 06 Sep 2023 14:27:24 GMT
|
66
132
|
recorded_with: VCR 6.2.0
|
data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml
CHANGED
@@ -23,13 +23,13 @@ http_interactions:
|
|
23
23
|
Cache-Control:
|
24
24
|
- public, max-age=0, must-revalidate
|
25
25
|
Content-Length:
|
26
|
-
- '
|
26
|
+
- '6140'
|
27
27
|
Content-Type:
|
28
28
|
- application/json; charset=utf-8
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Wed, 06 Sep 2023 14:27:22 GMT
|
31
31
|
Etag:
|
32
|
-
- '"
|
32
|
+
- '"jbappwm5z94q8"'
|
33
33
|
Server:
|
34
34
|
- Vercel
|
35
35
|
Strict-Transport-Security:
|
@@ -39,7 +39,7 @@ http_interactions:
|
|
39
39
|
X-Vercel-Cache:
|
40
40
|
- MISS
|
41
41
|
X-Vercel-Id:
|
42
|
-
- fra1::iad1::
|
42
|
+
- fra1::iad1::6rbj8-1694010442492-b47595ed1d2f
|
43
43
|
Connection:
|
44
44
|
- close
|
45
45
|
body:
|
@@ -47,18 +47,46 @@ http_interactions:
|
|
47
47
|
string: '{"id":"f3629c86-06e0-42c0-844a-266b03a91ef1","doi":"https://doi.org/10.59350/37y2z-gre70","url":"https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html","title":"Ten
|
48
48
|
years and a million links","summary":"As trailed on a Twitter thread last
|
49
49
|
week I’ve been working on a manuscript describing the efforts to map taxonomic
|
50
|
-
names to their original descriptions in the taxonomic literature.
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
to
|
55
|
-
|
56
|
-
|
50
|
+
names to their original descriptions in the taxonomic literature.","content_html":"<p>As
|
51
|
+
trailed on a Twitter thread last week I’ve been working on a manuscript describing
|
52
|
+
the efforts to map taxonomic names to their original descriptions in the taxonomic
|
53
|
+
literature.</p>\n<blockquote><p>Putting together a manuscript on linking taxonomic
|
54
|
+
names to the primary literature, basically “um, what, exactly, have you been
|
55
|
+
doing all these years?”. TL;DR Across fungi, plants, and animals approx 1.3
|
56
|
+
million names have been linked to a persistent identifier for a publication.</p>—
|
57
|
+
Roderic Page (@rdmpage) <a href=\"https://twitter.com/rdmpage/status/1661714128413573120?ref_src=twsrc%5Etfw\">May
|
58
|
+
25, 2023</a></blockquote> \n<p>The preprint is on bioRxiv <a href=\"https://doi.org/10.1101/2023.05.29.542697\">doi:10.1101/2023.05.29.542697</a></p>\n<blockquote>\n<p>A
|
59
|
+
major gap in the biodiversity knowledge graph is a connection between taxonomic
|
60
|
+
names and the taxonomic literature. While both names and publications often
|
61
|
+
have persistent identifiers (PIDs), such as Life Science Identifiers (LSIDs)
|
62
|
+
or Digital Object Identifiers (DOIs), LSIDs for names are rarely linked to
|
63
|
+
DOIs for publications. This article describes efforts to make those connections
|
64
|
+
across three large taxonomic databases: Index Fungorum, International Plant
|
65
|
+
Names Index (IPNI), and the Index of Organism Names (ION). Over a million
|
66
|
+
names have been matched to DOIs or other persistent identifiers for taxonomic
|
67
|
+
publications. This represents approximately 36% of names for which publication
|
68
|
+
data is available. The mappings between LSIDs and publication PIDs are made
|
69
|
+
available through ChecklistBank. Applications of this mapping are discussed,
|
70
|
+
including a web app to locate the citation of a taxonomic name, and a knowledge
|
71
|
+
graph that uses data on researcher’s ORCID ids to connect taxonomic names
|
72
|
+
and publications to authors of those names.</p>\n</blockquote>\n<p>Much of
|
73
|
+
the work has been linking taxa to names, which still has huge gaps. There
|
74
|
+
are also interesting differences in coverage between plants, animals, and
|
75
|
+
fungi (see preprint for details).</p>\n\n<div><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdWsSQhqi1DErXMIHm28g37-fiALNIsI5eQZmvoX_Fe03ZSwtKHbYt-LCsCCAUop0AGcwy_w7NpIjylVH1hNrM9oW-6j9e6tHASha49TTqFvDg2_tEx3r74RRFsjUo4M_Qat8NmKaZSChOt2hI3LsMjTVLrEVirEckU-9Ei7ug-7OHQlR4LA/s2276/animals-coverage.png\"><img
|
76
|
+
width=\"320\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdWsSQhqi1DErXMIHm28g37-fiALNIsI5eQZmvoX_Fe03ZSwtKHbYt-LCsCCAUop0AGcwy_w7NpIjylVH1hNrM9oW-6j9e6tHASha49TTqFvDg2_tEx3r74RRFsjUo4M_Qat8NmKaZSChOt2hI3LsMjTVLrEVirEckU-9Ei7ug-7OHQlR4LA/s320/animals-coverage.png\"
|
77
|
+
/></a></div><div><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyxlVJ-oyMCNPmHtHWjSxdxMSJvgzdWRGRF6Ad4dk7ab7gGDpuKdKmS9XhROkopw361ylfsTd1ZkwkF6BN0JlWNnVLCKY1AfryCfWKHkgPQM7u-0SELW9j8RlQIflb6ibaV64gwW7oJrEvOGECvR51F8EW8cRg-1usW-GBM5ymObj7zlObQ/s2276/fungi-coverage.png\"><img
|
78
|
+
width=\"320\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyxlVJ-oyMCNPmHtHWjSxdxMSJvgzdWRGRF6Ad4dk7ab7gGDpuKdKmS9XhROkopw361ylfsTd1ZkwkF6BN0JlWNnVLCKY1AfryCfWKHkgPQM7u-0SELW9j8RlQIflb6ibaV64gwW7oJrEvOGECvR51F8EW8cRg-1usW-GBM5ymObj7zlObQ/s320/fungi-coverage.png\"
|
79
|
+
/></a></div><div><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0YBuvNSXWAJTfQ1jk4XSocMzCYHP7t6IPUqhjQ3mftgM_850igWaD2copgNH6Xk6T62xBU641wvwOvXgCCDY3m2xC_gaILXO9RGx8H3Gpy5OOncsLb9smpT2LIgtYOExVBVdDRWqA0AZ8-mQjWL7dL5TiG7MqVu8spT8ACoGOPR_T36hRA/s2276/plants-coverage.png\"><img
|
80
|
+
width=\"320\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0YBuvNSXWAJTfQ1jk4XSocMzCYHP7t6IPUqhjQ3mftgM_850igWaD2copgNH6Xk6T62xBU641wvwOvXgCCDY3m2xC_gaILXO9RGx8H3Gpy5OOncsLb9smpT2LIgtYOExVBVdDRWqA0AZ8-mQjWL7dL5TiG7MqVu8spT8ACoGOPR_T36hRA/s320/plants-coverage.png\"
|
81
|
+
/></a></div>\n\n\nThere is also a simple app to demonstrate these links, see
|
82
|
+
<a href=\"https://species-cite.herokuapp.com\">https://species-cite.herokuapp.com</a>.\n\n\n\n<blockquote>\n<p>Written
|
83
|
+
with <a href=\"https://stackedit.io/\">StackEdit</a>.</p>\n</blockquote>","published_at":1685553960,"updated_at":1685554180,"indexed_at":1689933917,"authors":[{"url":"https://orcid.org/0000-0002-7101-9767","name":"Roderic
|
84
|
+
Page"}],"image":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdWsSQhqi1DErXMIHm28g37-fiALNIsI5eQZmvoX_Fe03ZSwtKHbYt-LCsCCAUop0AGcwy_w7NpIjylVH1hNrM9oW-6j9e6tHASha49TTqFvDg2_tEx3r74RRFsjUo4M_Qat8NmKaZSChOt2hI3LsMjTVLrEVirEckU-9Ei7ug-7OHQlR4LA/s320/animals-coverage.png","tags":[],"language":"en","reference":[],"relationships":[],"blog_id":"tyfqw20","blog_name":"iPhylo","blog_slug":"iphylo","blog":{"id":"tyfqw20","title":"iPhylo","description":"Rants,
|
57
85
|
raves (and occasionally considered opinions) on phyloinformatics, taxonomy,
|
58
86
|
and biodiversity informatics. For more ranty and less considered opinions,
|
59
87
|
see my <a href=\"https://twitter.com/rdmpage\">Twitter feed</a>.<br>ISSN 2051-8188.
|
60
88
|
Written content on this site is licensed under a <a href=\"https://creativecommons.org/licenses/by/4.0/\">Creative
|
61
|
-
Commons Attribution 4.0 International license</a>.","language":"en","favicon":null,"feed_url":"https://iphylo.blogspot.com/feeds/posts/default","home_page_url":"https://iphylo.blogspot.com
|
62
|
-
7.00","category":"
|
63
|
-
recorded_at:
|
89
|
+
Commons Attribution 4.0 International license</a>.","language":"en","favicon":null,"feed_url":"https://iphylo.blogspot.com/feeds/posts/default","home_page_url":"https://iphylo.blogspot.com","user_id":"b98bb1b6-b96b-4e8a-94d3-4285ea715f5b","created_at":"2023-02-06","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
|
90
|
+
7.00","category":"computerAndInformationSciences","prefix":"10.59350","modified_at":"2023-08-31T12:36:33+00:00","version":"https://jsonfeed.org/version/1.1","current_feed_url":null,"status":"active","issn":"2051-8188","backlog":0,"authors":null,"plan":"Team","slug":"iphylo","use_mastodon":true}}'
|
91
|
+
recorded_at: Wed, 06 Sep 2023 14:27:23 GMT
|
64
92
|
recorded_with: VCR 6.2.0
|