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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +33 -29
  3. data/lib/commonmeta/crossref_utils.rb +20 -0
  4. data/lib/commonmeta/readers/json_feed_reader.rb +19 -1
  5. data/lib/commonmeta/schema_utils.rb +1 -1
  6. data/lib/commonmeta/version.rb +1 -1
  7. data/resources/{commonmeta_v0.9.2.json → commonmeta_v0.9.3.json} +32 -2
  8. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blog_post_with_non-url_id.yml +84 -18
  9. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml +42 -14
  10. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_author_name_suffix.yml +184 -55
  11. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_doi.yml +76 -15
  12. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_institutional_author.yml +33 -12
  13. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_organizational_author.yml +44 -11
  14. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_related_identifiers.yml +366 -0
  15. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_without_doi.yml +144 -11
  16. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post.yml +42 -13
  17. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml +17 -13
  18. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/substack_post_with_broken_reference.yml +557 -262
  19. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/syldavia_gazette_post_with_references.yml +76 -47
  20. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/upstream_post_with_references.yml +303 -123
  21. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post.yml +108 -12
  22. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_many_references.yml +3048 -441
  23. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_references.yml +178 -31
  24. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_tracking_code_on_url.yml +139 -17
  25. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/another_schema_org_from_front-matter.yml +47 -48
  26. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article.yml +5 -5
  27. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article_from_datacite.yml +7 -7
  28. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml +17 -13
  29. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_doi.yml +108 -12
  30. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_organizational_author.yml +44 -11
  31. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_relations.yml +366 -0
  32. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_upstream_blog.yml +200 -11
  33. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_with_references.yml +303 -123
  34. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/posted_content.yml +16 -16
  35. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/schema_org_from_another_science_blog.yml +17 -17
  36. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/schema_org_from_front_matter.yml +111 -113
  37. data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/schema_org_from_upstream_blog.yml +64 -57
  38. data/spec/readers/json_feed_reader_spec.rb +85 -57
  39. data/spec/writers/crossref_xml_writer_spec.rb +76 -40
  40. metadata +6 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c4fb0fccfd81d27f198f9cb4f4d56dace1a0ea509f9dfa48603e6b09d5058cf
4
- data.tar.gz: d50b7df6d786722b3d86a61da19c1c3083cf2df55c46d9b70393d67532802e43
3
+ metadata.gz: 75ab77371ac7823493a9e182a81284ae858bc10ee4d2a1df6dd598518024d645
4
+ data.tar.gz: 696bccaa9835c5b5f7eefc666051fae1d01b608a4e94286b54630053324779b3
5
5
  SHA512:
6
- metadata.gz: d4b8a03b506d1b14895fdf0f41a66cb45d674f15f0d022826f335048213533d73f32e8394c7f40df5935d7d56670f104b76a1042ed313c88e08ee0a38e1cd89c
7
- data.tar.gz: 9af2e1d27abdc064550b95ce544394c72cf319dde10f1e2e33001ee6d61ba57d4554573772059c78a36e7235efd894549225f5090f8e11dcb8e31299701966f0
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.3.18)
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.6)
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.3.5)
65
+ ebnf (2.4.0)
64
66
  htmlentities (~> 4.3)
65
- rdf (~> 3.2)
67
+ rdf (~> 3.3)
66
68
  scanf (~> 1.0)
67
- sxp (~> 1.2)
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.2.5)
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.2, >= 3.2.10)
102
- json-ld-preloaded (3.2.2)
103
- json-ld (~> 3.2)
104
- rdf (~> 3.2)
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.19.0)
126
+ minitest (5.20.0)
125
127
  multi_json (1.15.0)
126
128
  namae (1.1.1)
127
- nokogiri (1.15.3-arm64-darwin)
129
+ nokogiri (1.15.4-arm64-darwin)
128
130
  racc (~> 1.4)
129
- oj (3.15.1)
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.2.11)
150
+ rdf (3.3.0)
151
+ bcp47_spec (~> 0.2)
149
152
  link_header (~> 0.0, >= 0.0.8)
150
- rdf-rdfxml (3.2.2)
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.2)
154
- rdf-xsd (~> 3.2)
155
- rdf-turtle (3.2.1)
156
- ebnf (~> 2.3)
157
- rdf (~> 3.2)
158
- rdf-xsd (3.2.1)
159
- rdf (~> 3.2)
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.55.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.18.0)
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.0)
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.2.4)
220
+ sxp (1.3.0)
217
221
  matrix (~> 0.4)
218
- rdf (~> 3.2)
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.18.1)
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.2.json",
8
+ COMMONMETA = File.read(File.expand_path("../../resources/commonmeta_v0.9.3.json",
9
9
  __dir__))
10
10
 
11
11
  def json_schema_errors
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmeta
4
- VERSION = '3.3.18'
4
+ VERSION = '3.4.0'
5
5
  end
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://commonmeta.org/commonmeta_v0.9.2.json",
4
- "title": "Commonmeta v0.9.2",
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
- - '2106'
26
+ - '8527'
27
27
  Content-Type:
28
28
  - application/json; charset=utf-8
29
29
  Date:
30
- - Mon, 10 Jul 2023 21:04:54 GMT
30
+ - Wed, 06 Sep 2023 14:27:24 GMT
31
31
  Etag:
32
- - '"13pz9o7pqcg1mi"'
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::jbp2f-1689023094094-f2a6094c04f1
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, after another long hiatus.
53
- Here are some of my reasons.1. I like to write, and I have things to say,
54
- and I self-identify as an author. For eight years, I have co-organized and
55
- taught in...","published_at":1673233380,"updated_at":1680470227,"indexed_at":1689006804,"authors":[{"url":null,"name":"Stephen
56
- Matheson"}],"image":null,"tags":["Introduction"],"language":"en","reference":[],"blog_id":"5764g49","blog_name":"Quintessence
57
- of Dust","blog":{"id":"5764g49","title":"Quintessence of Dust","description":"<i>Quintessence
58
- of Dust</i> explores science, society, and human nature, focusing on genetics,
59
- development, evolution, neuroscience, systems biology, and topics related
60
- to scientific literacy. I occasionally discuss intelligent design, creationism,
61
- science denial, and other political/social influences on scientific literacy.
62
- Additional topics: philosophy, baseball, scientific culture, and Shakespeare.
63
- 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":"8498eaf6-8c58-4b58-bc15-27eda292b1aa","created_at":"2023-05-31T14:21:27+00:00","indexed_at":"2023-04-18","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
64
- 7.00","category":"Social Sciences","prefix":"10.59350","modified_at":"2023-07-05T03:41:45+00:00","version":"https://jsonfeed.org/version/1.1","backlog":true,"current_feed_url":null,"expired":null}}'
65
- recorded_at: Mon, 10 Jul 2023 21:04:54 GMT
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&amp;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
@@ -23,13 +23,13 @@ http_interactions:
23
23
  Cache-Control:
24
24
  - public, max-age=0, must-revalidate
25
25
  Content-Length:
26
- - '2018'
26
+ - '6140'
27
27
  Content-Type:
28
28
  - application/json; charset=utf-8
29
29
  Date:
30
- - Mon, 10 Jul 2023 21:04:51 GMT
30
+ - Wed, 06 Sep 2023 14:27:22 GMT
31
31
  Etag:
32
- - '"rlf5k9cygn1ju"'
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::9gxbv-1689023091514-026dffac583b
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. Putting
51
- together a manuscript on linking taxonomic names to the primary literature,
52
- basically “um, what, exactly, have you been doing all these years?”. TL;DR
53
- Across fungi, plants, and animals approx 1.3 million names have been linked
54
- to a persistent identifier for a publication.— Roderic Page (@rdmpage) May
55
- 25,...","published_at":1685553960,"updated_at":1685554180,"indexed_at":1689006804,"authors":[{"url":"https://orcid.org/0000-0002-7101-9767","name":"Roderic
56
- Page"}],"image":null,"tags":[],"language":"en","reference":[],"blog_id":"tyfqw20","blog_name":"iPhylo","blog":{"id":"tyfqw20","title":"iPhylo","description":"Rants,
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/","user_id":"8498eaf6-8c58-4b58-bc15-27eda292b1aa","created_at":"2023-05-31T08:03:14+00:00","indexed_at":"2023-02-06","feed_format":"application/atom+xml","license":"https://creativecommons.org/licenses/by/4.0/legalcode","generator":"Blogger
62
- 7.00","category":"Natural Sciences","prefix":"10.59350","modified_at":"2023-06-17T15:38:20+00:00","version":"https://jsonfeed.org/version/1.1","backlog":true,"current_feed_url":null,"expired":null}}'
63
- recorded_at: Mon, 10 Jul 2023 21:04:52 GMT
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