bolognese 2.2.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +1 -1
  3. data/.github/workflows/release.yml +2 -2
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +196 -164
  6. data/README.md +1 -1
  7. data/bolognese.gemspec +30 -37
  8. data/lib/bolognese/author_utils.rb +2 -44
  9. data/lib/bolognese/citeproc_extensions.rb +48 -0
  10. data/lib/bolognese/datacite_utils.rb +17 -7
  11. data/lib/bolognese/doi_utils.rb +4 -3
  12. data/lib/bolognese/metadata.rb +8 -5
  13. data/lib/bolognese/metadata_utils.rb +19 -4
  14. data/lib/bolognese/readers/citeproc_reader.rb +7 -1
  15. data/lib/bolognese/readers/codemeta_reader.rb +1 -1
  16. data/lib/bolognese/readers/crossref_reader.rb +50 -4
  17. data/lib/bolognese/readers/datacite_reader.rb +22 -48
  18. data/lib/bolognese/readers/ris_reader.rb +1 -1
  19. data/lib/bolognese/readers/schema_org_reader.rb +22 -3
  20. data/lib/bolognese/utils.rb +107 -120
  21. data/lib/bolognese/version.rb +1 -1
  22. data/lib/bolognese/writers/csv_writer.rb +3 -5
  23. data/lib/bolognese/writers/jats_writer.rb +3 -2
  24. data/lib/bolognese/writers/schema_org_writer.rb +4 -0
  25. data/lib/bolognese.rb +1 -4
  26. data/resources/kernel-4/include/datacite-contributorType-v4.xsd +3 -1
  27. data/resources/kernel-4/include/datacite-dateType-v4.xsd +3 -1
  28. data/resources/kernel-4/include/datacite-relatedIdentifierType-v4.xsd +7 -2
  29. data/resources/kernel-4/include/datacite-relationType-v4.xsd +9 -3
  30. data/resources/kernel-4/include/datacite-resourceType-v4.xsd +8 -1
  31. data/resources/kernel-4/include/datacite-titleType-v4.xsd +1 -1
  32. data/resources/kernel-4/metadata.xsd +5 -1
  33. data/resources/kernel-4.6/include/datacite-contributorType-v4.xsd +37 -0
  34. data/resources/kernel-4.6/include/datacite-dateType-v4.xsd +27 -0
  35. data/resources/kernel-4.6/include/datacite-descriptionType-v4.xsd +19 -0
  36. data/resources/kernel-4.6/include/datacite-funderIdentifierType-v4.xsd +16 -0
  37. data/resources/kernel-4.6/include/datacite-nameType-v4.xsd +10 -0
  38. data/resources/kernel-4.6/include/datacite-numberType-v4.xsd +12 -0
  39. data/resources/kernel-4.6/include/datacite-relatedIdentifierType-v4.xsd +37 -0
  40. data/resources/kernel-4.6/include/datacite-relationType-v4.xsd +57 -0
  41. data/resources/kernel-4.6/include/datacite-resourceType-v4.xsd +49 -0
  42. data/resources/kernel-4.6/include/datacite-titleType-v4.xsd +14 -0
  43. data/resources/kernel-4.6/include/xml.xsd +286 -0
  44. data/resources/kernel-4.6/metadata.xsd +712 -0
  45. data/resources/kernel-4.7/include/datacite-contributorType-v4.xsd +37 -0
  46. data/resources/kernel-4.7/include/datacite-dateType-v4.xsd +27 -0
  47. data/resources/kernel-4.7/include/datacite-descriptionType-v4.xsd +19 -0
  48. data/resources/kernel-4.7/include/datacite-funderIdentifierType-v4.xsd +16 -0
  49. data/resources/kernel-4.7/include/datacite-nameType-v4.xsd +10 -0
  50. data/resources/kernel-4.7/include/datacite-numberType-v4.xsd +12 -0
  51. data/resources/kernel-4.7/include/datacite-relatedIdentifierType-v4.xsd +39 -0
  52. data/resources/kernel-4.7/include/datacite-relationType-v4.xsd +59 -0
  53. data/resources/kernel-4.7/include/datacite-resourceType-v4.xsd +52 -0
  54. data/resources/kernel-4.7/include/datacite-titleType-v4.xsd +14 -0
  55. data/resources/kernel-4.7/include/xml.xsd +286 -0
  56. data/resources/kernel-4.7/metadata.xsd +715 -0
  57. metadata +141 -724
  58. data/spec/array_spec.rb +0 -22
  59. data/spec/author_utils_spec.rb +0 -259
  60. data/spec/cli_spec.rb +0 -226
  61. data/spec/datacite_utils_spec.rb +0 -207
  62. data/spec/doi_utils_spec.rb +0 -314
  63. data/spec/find_from_format_spec.rb +0 -114
  64. data/spec/fixtures/aida.json +0 -82
  65. data/spec/fixtures/cgimp_package.json +0 -18
  66. data/spec/fixtures/cit_package.json +0 -19
  67. data/spec/fixtures/citeproc-no-author.json +0 -26
  68. data/spec/fixtures/citeproc-no-categories.json +0 -21
  69. data/spec/fixtures/citeproc.json +0 -32
  70. data/spec/fixtures/codemeta.json +0 -86
  71. data/spec/fixtures/codemeta_v2.json +0 -86
  72. data/spec/fixtures/crosscite.json +0 -63
  73. data/spec/fixtures/crossref.bib +0 -14
  74. data/spec/fixtures/crossref.ris +0 -15
  75. data/spec/fixtures/crossref.xml +0 -606
  76. data/spec/fixtures/datacite-empty-sizes.xml +0 -57
  77. data/spec/fixtures/datacite-example-ROR-nameIdentifiers.xml +0 -125
  78. data/spec/fixtures/datacite-example-affiliation.xml +0 -114
  79. data/spec/fixtures/datacite-example-ancientdates-v4.3.xml +0 -29
  80. data/spec/fixtures/datacite-example-complicated-tba.xml +0 -56
  81. data/spec/fixtures/datacite-example-complicated-v3.0.xml +0 -48
  82. data/spec/fixtures/datacite-example-complicated-v4.0.xml +0 -54
  83. data/spec/fixtures/datacite-example-complicated-v4.1.xml +0 -57
  84. data/spec/fixtures/datacite-example-dissertation-v4.4.xml +0 -56
  85. data/spec/fixtures/datacite-example-escaped-text.xml +0 -56
  86. data/spec/fixtures/datacite-example-full-v4.4.xml +0 -114
  87. data/spec/fixtures/datacite-example-full-v4.5.xml +0 -255
  88. data/spec/fixtures/datacite-example-geolocation-2.xml +0 -141
  89. data/spec/fixtures/datacite-example-geolocation.xml +0 -66
  90. data/spec/fixtures/datacite-example-nameIdentifier-with-schemeURI.xml +0 -94
  91. data/spec/fixtures/datacite-example-polygon-v4.1.xml +0 -163
  92. data/spec/fixtures/datacite-example-relateditems-with-attributes.xml +0 -61
  93. data/spec/fixtures/datacite-example-relateditems.xml +0 -61
  94. data/spec/fixtures/datacite-example-xs-string.xml +0 -28
  95. data/spec/fixtures/datacite-formats-with-xs.xml +0 -22
  96. data/spec/fixtures/datacite-funderIdentifier.xml +0 -98
  97. data/spec/fixtures/datacite-geolocation-empty.xml +0 -159
  98. data/spec/fixtures/datacite-geolocationpolygons-multiple.xml +0 -76
  99. data/spec/fixtures/datacite-metadata-sample-complicated-v2.2.xml +0 -52
  100. data/spec/fixtures/datacite-multiple-language.xml +0 -38
  101. data/spec/fixtures/datacite-multiple-rights.xml +0 -59
  102. data/spec/fixtures/datacite-schema-2.2.xml +0 -80
  103. data/spec/fixtures/datacite-seriesinformation.xml +0 -46
  104. data/spec/fixtures/datacite-space-in-sizes.xml +0 -52
  105. data/spec/fixtures/datacite-xml-lang.xml +0 -51
  106. data/spec/fixtures/datacite.json +0 -89
  107. data/spec/fixtures/datacite.xml +0 -40
  108. data/spec/fixtures/datacite_blank_name_identifier.xml +0 -22
  109. data/spec/fixtures/datacite_blank_publisher.xml +0 -18
  110. data/spec/fixtures/datacite_dataset.xml +0 -58
  111. data/spec/fixtures/datacite_journal_article.xml +0 -64
  112. data/spec/fixtures/datacite_malformed_creator.xml +0 -52
  113. data/spec/fixtures/datacite_missing_creator.xml +0 -33
  114. data/spec/fixtures/datacite_schema_3.xml +0 -58
  115. data/spec/fixtures/datacite_software.json +0 -21
  116. data/spec/fixtures/datacite_software_missing_comma.json +0 -18
  117. data/spec/fixtures/datacite_software_overlapping_keys.json +0 -18
  118. data/spec/fixtures/datacite_software_version.json +0 -74
  119. data/spec/fixtures/edam_package.json +0 -12
  120. data/spec/fixtures/funding_reference.xml +0 -53
  121. data/spec/fixtures/gtex.xml +0 -71
  122. data/spec/fixtures/maremma/codemeta.json +0 -36
  123. data/spec/fixtures/nist.xml +0 -35
  124. data/spec/fixtures/ns0.xml +0 -2
  125. data/spec/fixtures/pure.bib +0 -14
  126. data/spec/fixtures/pure.ris +0 -15
  127. data/spec/fixtures/pure.xml +0 -188
  128. data/spec/fixtures/ris_bug.ris +0 -9
  129. data/spec/fixtures/schema_4.0.xml +0 -140
  130. data/spec/fixtures/schema_org.json +0 -50
  131. data/spec/fixtures/schema_org_geolocation.json +0 -82
  132. data/spec/fixtures/schema_org_geoshape.json +0 -550
  133. data/spec/fixtures/schema_org_gtex.json +0 -75
  134. data/spec/fixtures/schema_org_list.json +0 -12623
  135. data/spec/fixtures/schema_org_tdl_iodp_invalid_authors.json +0 -25
  136. data/spec/fixtures/schema_org_topmed.json +0 -53
  137. data/spec/fixtures/schema_org_type_as_array.json +0 -41
  138. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/default.yml +0 -106
  139. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_bibtex.yml +0 -106
  140. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_citation.yml +0 -106
  141. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_crossref.yml +0 -106
  142. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_datacite.yml +0 -106
  143. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_jats.yml +0 -106
  144. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_schema_org.yml +0 -106
  145. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/default.yml +0 -106
  146. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_bibtex.yml +0 -106
  147. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_citation.yml +0 -106
  148. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_datacite.yml +0 -106
  149. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_datacite_json.yml +0 -106
  150. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_jats.yml +0 -106
  151. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_schema_org.yml +0 -106
  152. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/default.yml +0 -117
  153. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_datacite.yml +0 -117
  154. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_schema_org.yml +0 -115
  155. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/crossref.yml +0 -54
  156. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/datacite.yml +0 -54
  157. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/jalc.yml +0 -54
  158. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/kisti.yml +0 -54
  159. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/medra.yml +0 -54
  160. data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/op.yml +0 -54
  161. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/author.yml +0 -48
  162. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/no_author.yml +0 -48
  163. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/single_author.yml +0 -48
  164. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/with_organization.yml +0 -48
  165. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_datacite_metadata/change_state.yml +0 -106
  166. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_datacite_metadata/change_title.yml +0 -106
  167. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_description.yml +0 -55
  168. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_identifiers.yml +0 -55
  169. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_license.yml +0 -55
  170. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_license_name.yml +0 -55
  171. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_license_url.yml +0 -55
  172. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_state.yml +0 -55
  173. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/validates_against_schema.yml +0 -55
  174. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/with_data_citation.yml +0 -55
  175. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/doi.yml +0 -48
  176. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/doi_with_protocol.yml +0 -48
  177. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/dx_doi_org_url.yml +0 -48
  178. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/force_test_resolver.yml +0 -48
  179. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/https_url.yml +0 -48
  180. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/test_resolver.yml +0 -48
  181. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/test_resolver_http.yml +0 -48
  182. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/doi.yml +0 -48
  183. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/doi_with_special_characters.yml +0 -48
  184. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/not_a_doi.yml +0 -48
  185. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/sandbox_url.yml +0 -48
  186. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/url.yml +0 -48
  187. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/crossref.yml +0 -99
  188. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/datacite.yml +0 -99
  189. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/jalc.yml +0 -99
  190. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/kisti.yml +0 -99
  191. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/medra.yml +0 -99
  192. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/not_a_valid_prefix.yml +0 -48
  193. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/not_found.yml +0 -99
  194. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/op.yml +0 -99
  195. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/doi.yml +0 -48
  196. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/doi_with_protocol.yml +0 -48
  197. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/dx_doi_org_url.yml +0 -48
  198. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/force_stage_resolver.yml +0 -48
  199. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/https_url.yml +0 -48
  200. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/stage_resolver.yml +0 -48
  201. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/stage_resolver_http.yml +0 -48
  202. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/crossref.yml +0 -157
  203. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/crossref_doi_not_url.yml +0 -157
  204. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/datacite.yml +0 -157
  205. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/datacite_doi_http.yml +0 -157
  206. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/github.yml +0 -106
  207. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/orcid.yml +0 -106
  208. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/schema_org.yml +0 -106
  209. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/unknown_DOI_registration_agency.yml +0 -157
  210. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/bibtex.yml +0 -106
  211. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/citeproc.yml +0 -106
  212. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/codemeta.yml +0 -106
  213. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/crosscite.yml +0 -106
  214. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/crossref.yml +0 -106
  215. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/datacite.yml +0 -106
  216. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/datacite_json.yml +0 -106
  217. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/ris.yml +0 -106
  218. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/schema_org.yml +0 -106
  219. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_string/crosscite.yml +0 -106
  220. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/hsh_to_fos_for_match.yml +0 -48
  221. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/hsh_to_fos_for_with_schemeUri_in_hash.yml +0 -48
  222. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/hsh_to_fos_match.yml +0 -48
  223. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/hsh_to_fos_no_match.yml +0 -48
  224. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/name_to_fos_for_match.yml +0 -48
  225. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/name_to_fos_match.yml +0 -48
  226. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/fos/name_to_fos_no_match.yml +0 -48
  227. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/from_schema_org/with_id.yml +0 -48
  228. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/from_schema_org_creators/with_affiliation.yml +0 -48
  229. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/from_schema_org_creators/without_affiliation.yml +0 -48
  230. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_codemeta_metadata/maremma.yml +0 -75
  231. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_codemeta_metadata/metadata_reports.yml +0 -75
  232. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/DOI_with_ORCID_ID.yml +0 -103
  233. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/DOI_with_SICI_DOI.yml +0 -102
  234. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/DOI_with_data_citation.yml +0 -106
  235. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/JaLC.yml +0 -137
  236. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/KISTI.yml +0 -158
  237. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/OP.yml +0 -100
  238. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/affiliation_is_space.yml +0 -101
  239. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/another_book.yml +0 -138
  240. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/another_book_chapter.yml +0 -100
  241. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/article_id_as_page_number.yml +0 -101
  242. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/author_literal.yml +0 -108
  243. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/book.yml +0 -99
  244. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/book_chapter.yml +0 -170
  245. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/book_chapter_with_RDF_for_container.yml +0 -99
  246. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/book_oup.yml +0 -98
  247. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/component.yml +0 -120
  248. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/dataset.yml +0 -130
  249. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/dataset_usda.yml +0 -143
  250. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/date_in_future.yml +0 -101
  251. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/dissertation.yml +0 -129
  252. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/empty_given_name.yml +0 -101
  253. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/invalid_date.yml +0 -101
  254. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article.yml +0 -100
  255. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_original_language_title.yml +0 -99
  256. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml +0 -104
  257. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with_RDF_for_container.yml +0 -99
  258. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with_funding.yml +0 -100
  259. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_issue.yml +0 -127
  260. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/mEDRA.yml +0 -98
  261. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/markup.yml +0 -105
  262. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/missing_creator.yml +0 -100
  263. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_issn.yml +0 -99
  264. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_titles.yml +0 -98
  265. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_titles_with_missing.yml +0 -450
  266. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/not_found_error.yml +0 -97
  267. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/peer_review.yml +0 -103
  268. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content.yml +0 -99
  269. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content_copernicus.yml +0 -102
  270. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/report_osti.yml +0 -144
  271. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/vor_with_url.yml +0 -102
  272. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/yet_another_book.yml +0 -99
  273. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/yet_another_book_chapter.yml +0 -99
  274. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_json_metadata/metadata_from_api.yml +0 -106
  275. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/BlogPosting.yml +0 -106
  276. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_staging_system.yml +0 -106
  277. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_staging_system_schema_3.yml +0 -106
  278. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_with_related_id_system.yml +0 -106
  279. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_not_found.yml +0 -102
  280. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Dataset.yml +0 -106
  281. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding.yml +0 -106
  282. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding_empty_awardTitle.yml +0 -106
  283. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding_schema_version_4.yml +0 -106
  284. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Referee_report_in_staging_system.yml +0 -106
  285. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Schema_org_type.yml +0 -106
  286. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/author_only_full_name.yml +0 -106
  287. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/author_with_scheme.yml +0 -106
  288. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/author_with_wrong_orcid_scheme.yml +0 -106
  289. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/cc-by_3_0_us.yml +0 -106
  290. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/content_url.yml +0 -106
  291. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/date.yml +0 -106
  292. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/dissertation.yml +0 -106
  293. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/doi_with_sign.yml +0 -106
  294. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/empty_subject.yml +0 -106
  295. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/even_more_subject_scheme_FOR.yml +0 -106
  296. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/funding_references.yml +0 -106
  297. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/funding_schema_version_3.yml +0 -106
  298. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/is_identical_to.yml +0 -106
  299. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/keywords_with_attributes.yml +0 -106
  300. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/leading_and_trailing_whitespace.yml +0 -106
  301. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/more_subject_scheme_FOR.yml +0 -106
  302. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/multiple_author_names_in_one_creatorsName.yml +0 -106
  303. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/multiple_licenses.yml +0 -106
  304. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/series-information.yml +0 -106
  305. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/subject_scheme.yml +0 -106
  306. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/subject_scheme_FOR.yml +0 -106
  307. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date/publication_date.yml +0 -48
  308. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_date_parts/date.yml +0 -48
  309. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_date_parts/year-month.yml +0 -48
  310. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_date_parts/year.yml +0 -48
  311. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_parts/date.yml +0 -48
  312. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_parts/year-month.yml +0 -48
  313. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_parts/year.yml +0 -48
  314. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_parts/date.yml +0 -48
  315. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_parts/year-month.yml +0 -48
  316. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_parts/year.yml +0 -48
  317. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datetime_from_time/future.yml +0 -48
  318. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datetime_from_time/invalid.yml +0 -48
  319. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datetime_from_time/nil.yml +0 -48
  320. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datetime_from_time/past.yml +0 -48
  321. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datetime_from_time/present.yml +0 -48
  322. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_familyName.yml +0 -55
  323. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_Thai.yml +0 -55
  324. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_display-order.yml +0 -55
  325. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_display-order_with_ORCID.yml +0 -55
  326. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_sort-order.yml +0 -55
  327. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/hyper-authorship.yml +0 -55
  328. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/is_organization.yml +0 -48
  329. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/multiple_author_names_in_one_field.yml +0 -55
  330. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/multiple_name_identifier.yml +0 -55
  331. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/name_with_affiliation.yml +0 -55
  332. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/name_with_affiliation_and_country.yml +0 -114
  333. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/name_with_role.yml +0 -55
  334. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/only_familyName_and_givenName.yml +0 -57
  335. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/BlogPosting.yml +0 -117
  336. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/BlogPosting_with_new_DOI.yml +0 -117
  337. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/harvard_dataverse.yml +0 -40
  338. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/pangaea.yml +0 -57
  339. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/zenodo.yml +0 -62
  340. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/only_title.yml +0 -48
  341. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/title_and_pages.yml +0 -48
  342. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/title_volume_and_pages.yml +0 -48
  343. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/title_volume_issue_and_pages.yml +0 -48
  344. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/github/github_as_codemeta_url.yml +0 -48
  345. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/github/github_from_url.yml +0 -48
  346. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/github/github_from_url_file.yml +0 -48
  347. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/handle_input/DOI_RA_not_Crossref_or_DataCite.yml +0 -54
  348. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/handle_input/unknown_DOI_prefix.yml +0 -54
  349. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_contributors/none.yml +0 -55
  350. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_creators/insert.yml +0 -55
  351. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_dates/insert.yml +0 -55
  352. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_descriptions/insert.yml +0 -55
  353. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_identifier/doi.yml +0 -55
  354. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_language/insert.yml +0 -55
  355. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_person/creator_only_name.yml +0 -55
  356. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_publication_year/insert.yml +0 -55
  357. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_publisher/insert.yml +0 -55
  358. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_related_identifiers/insert.yml +0 -55
  359. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_related_identifiers/related_identifier.yml +0 -55
  360. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_related_items/insert.yml +0 -73
  361. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_resource_type/insert.yml +0 -55
  362. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_rights_list/insert.yml +0 -55
  363. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_sizes/insert.yml +0 -55
  364. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_subjects/insert.yml +0 -73
  365. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_titles/insert.yml +0 -55
  366. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_version/insert.yml +0 -55
  367. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_comma.yml +0 -48
  368. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_family_name.yml +0 -48
  369. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_id.yml +0 -48
  370. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_known_given_name.yml +0 -48
  371. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_no_info.yml +0 -48
  372. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_orcid_id.yml +0 -48
  373. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_type_organization.yml +0 -48
  374. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/missing_comma.yml +0 -106
  375. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/nil.yml +0 -106
  376. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/overlapping_keys.yml +0 -106
  377. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/valid.yml +0 -106
  378. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_cc_url/not_found.yml +0 -48
  379. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_cc_url/with_trailing_slash.yml +0 -48
  380. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_cc_url/with_trailing_slash_and_to_https.yml +0 -48
  381. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/SICI_doi.yml +0 -48
  382. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi.yml +0 -48
  383. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_force_datacite_sandbox.yml +0 -48
  384. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_from_datacite_sandbox.yml +0 -48
  385. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_from_url_without_doi_proxy.yml +0 -48
  386. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_prefix_too_long.yml +0 -48
  387. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_prefix_with_string.yml +0 -48
  388. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_with_protocol.yml +0 -48
  389. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/dx_doi_org_url.yml +0 -48
  390. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/https_url.yml +0 -48
  391. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/not_valid_doi_prefix.yml +0 -48
  392. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/url_with_one_slash.yml +0 -48
  393. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/doi.yml +0 -48
  394. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/doi_as_url.yml +0 -48
  395. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/ftp.yml +0 -48
  396. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/invalid_url.yml +0 -48
  397. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/sandbox_via_options.yml +0 -48
  398. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/sandbox_via_url.yml +0 -48
  399. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/string.yml +0 -48
  400. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/url.yml +0 -48
  401. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/url_with_utf-8.yml +0 -48
  402. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_ids/doi.yml +0 -48
  403. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_ids/url.yml +0 -48
  404. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_array.yml +0 -48
  405. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_empty_array.yml +0 -48
  406. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_hash.yml +0 -48
  407. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_string.yml +0 -48
  408. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_url/uri.yml +0 -48
  409. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_url/with_trailing_slash.yml +0 -48
  410. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_url/with_trailing_slash_and_to_https.yml +0 -48
  411. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/array.yml +0 -48
  412. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/array_of_strings.yml +0 -48
  413. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/first.yml +0 -48
  414. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/hash.yml +0 -48
  415. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/nil.yml +0 -48
  416. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/string.yml +0 -48
  417. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/sanitize/should_only_keep_specific_tags.yml +0 -48
  418. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/sanitize/should_remove_a_tags.yml +0 -48
  419. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/spdx/hsh_to_spdx_id.yml +0 -48
  420. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/spdx/hsh_to_spdx_not_found.yml +0 -48
  421. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/spdx/hsh_to_spdx_url.yml +0 -48
  422. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/spdx/name_to_spdx_exists.yml +0 -48
  423. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/spdx/name_to_spdx_id.yml +0 -48
  424. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/to_schema_org/with_id.yml +0 -48
  425. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/to_schema_org_identifiers/with_identifiers.yml +0 -48
  426. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_doi/doi.yml +0 -48
  427. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_10.yml +0 -48
  428. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_11.yml +0 -48
  429. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_12.yml +0 -48
  430. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_13.yml +0 -48
  431. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_14.yml +0 -48
  432. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_4.yml +0 -48
  433. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_5.yml +0 -48
  434. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_6.yml +0 -48
  435. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_7.yml +0 -48
  436. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_8.yml +0 -48
  437. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/1_7_9.yml +0 -48
  438. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/funder_doi.yml +0 -48
  439. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/funder_doi_without_prefix.yml +0 -48
  440. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/non-funder_doi.yml +0 -48
  441. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid.yml +0 -48
  442. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_https.yml +0 -48
  443. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_id.yml +0 -48
  444. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_sandbox.yml +0 -65
  445. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_sandbox_https.yml +0 -65
  446. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_with_spaces.yml +0 -48
  447. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_wrong_id.yml +0 -48
  448. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_www.yml +0 -48
  449. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme.yml +0 -48
  450. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme_https.yml +0 -48
  451. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme_trailing_slash.yml +0 -48
  452. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme_www.yml +0 -48
  453. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/doi.yml +0 -48
  454. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/doi_as_url.yml +0 -48
  455. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/doi_with_protocol.yml +0 -48
  456. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/only_prefix.yml +0 -48
  457. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/DOI.yml +0 -48
  458. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/ISSN.yml +0 -48
  459. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/URL.yml +0 -48
  460. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/string.yml +0 -48
  461. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/BlogPosting.yml +0 -55
  462. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/Dataset.yml +0 -55
  463. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/authors_with_affiliations.yml +0 -114
  464. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/climate_data.yml +0 -55
  465. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/from_schema_org.yml +0 -115
  466. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/keywords_subject_scheme.yml +0 -55
  467. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/maremma.yml +0 -75
  468. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/text.yml +0 -55
  469. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/with_data_citation.yml +0 -55
  470. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/with_pages.yml +0 -52
  471. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Dataset.yml +0 -55
  472. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Journal_article.yml +0 -55
  473. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Journal_article_vancouver_style.yml +0 -55
  474. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Missing_author.yml +0 -49
  475. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/interactive_resource_without_dates.yml +0 -55
  476. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/software_w/version.yml +0 -55
  477. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Another_dataset.yml +0 -55
  478. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/BlogPosting.yml +0 -55
  479. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/BlogPosting_schema_org.yml +0 -115
  480. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Dataset.yml +0 -55
  481. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/container_title.yml +0 -55
  482. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/interactive_resource_without_dates.yml +0 -55
  483. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/journal_article.yml +0 -55
  484. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/keywords_subject_scheme.yml +0 -55
  485. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/maremma.yml +0 -75
  486. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/missing_creator.yml +0 -49
  487. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/multiple_abstracts.yml +0 -55
  488. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/organization_author.yml +0 -52
  489. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/software.yml +0 -55
  490. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/software_w/version.yml +0 -55
  491. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/with_only_first_page.yml +0 -50
  492. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/with_pages.yml +0 -52
  493. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_codemeta/SoftwareSourceCode_DataCite.yml +0 -55
  494. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_codemeta/SoftwareSourceCode_DataCite_check_codemeta_v2.yml +0 -55
  495. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/datacite_database_attributes.yml +0 -55
  496. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/maremma.yml +0 -75
  497. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/with_ORCID_ID.yml +0 -52
  498. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/with_data_citation.yml +0 -55
  499. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/with_data_citation_schema_org.yml +0 -117
  500. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crossref/from_DataCite.yml +0 -55
  501. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/climate_data.yml +0 -55
  502. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/maremma.yml +0 -75
  503. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/text.yml +0 -55
  504. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/with_data_citation.yml +0 -55
  505. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/with_pages.yml +0 -52
  506. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/maremma.yml +0 -75
  507. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/with_ORCID_ID.yml +0 -52
  508. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/with_data_citation.yml +0 -55
  509. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/with_data_citation_schema_org.yml +0 -117
  510. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/DOI_not_found.yml +0 -51
  511. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/Dataset_in_schema_4_0.yml +0 -55
  512. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/Text_pass-thru.yml +0 -55
  513. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/Text_pass-thru_with_doi_in_options.yml +0 -55
  514. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/maremma.yml +0 -75
  515. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_ORCID_ID.yml +0 -52
  516. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_data_citation.yml +0 -55
  517. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_data_citation_schema_org.yml +0 -115
  518. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_editor.yml +0 -49
  519. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_version.yml +0 -55
  520. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/Dataset_in_schema_4_0.yml +0 -55
  521. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/Text_pass-thru.yml +0 -55
  522. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/book_chapter.yml +0 -88
  523. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/interactive_resource_without_dates.yml +0 -55
  524. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/maremma.yml +0 -75
  525. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_ORCID_ID.yml +0 -52
  526. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_data_citation.yml +0 -55
  527. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_data_citation_schema_org.yml +0 -117
  528. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_editor.yml +0 -49
  529. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/BlogPosting.yml +0 -55
  530. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/BlogPosting_schema_org.yml +0 -117
  531. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/journal_article.yml +0 -55
  532. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/maremma.yml +0 -75
  533. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/with_pages.yml +0 -52
  534. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/BlogPosting.yml +0 -55
  535. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/BlogPosting_schema_org.yml +0 -117
  536. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/Dataset.yml +0 -55
  537. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/alternate_name.yml +0 -55
  538. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/journal_article.yml +0 -55
  539. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/keywords_with_subject_scheme.yml +0 -55
  540. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/maremma.yml +0 -75
  541. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/with_pages.yml +0 -52
  542. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Funding.yml +0 -106
  543. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Funding_OpenAIRE.yml +0 -106
  544. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON.yml +0 -55
  545. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_Cyark.yml +0 -106
  546. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_IsSupplementTo.yml +0 -106
  547. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_isReferencedBy.yml +0 -55
  548. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/alternate_identifiers.yml +0 -55
  549. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/data_catalog.yml +0 -55
  550. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/geo_location_box.yml +0 -55
  551. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/interactive_resource_without_dates.yml +0 -55
  552. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/journal_article.yml +0 -55
  553. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/maremma_schema_org_JSON.yml +0 -75
  554. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/series_information.yml +0 -55
  555. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/subject_scheme.yml +0 -55
  556. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/subject_scheme_multiple_keywords.yml +0 -55
  557. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_turtle/BlogPosting.yml +0 -55
  558. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_turtle/BlogPosting_schema_org.yml +0 -117
  559. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_turtle/Dataset.yml +0 -55
  560. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_turtle/journal_article.yml +0 -55
  561. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_turtle/with_pages.yml +0 -52
  562. data/spec/fixtures/vivli.xml +0 -1
  563. data/spec/metadata_spec.rb +0 -165
  564. data/spec/readers/bibtex_reader_spec.rb +0 -65
  565. data/spec/readers/citeproc_reader_spec.rb +0 -64
  566. data/spec/readers/codemeta_reader_spec.rb +0 -138
  567. data/spec/readers/crosscite_reader_spec.rb +0 -43
  568. data/spec/readers/crossref_reader_spec.rb +0 -1102
  569. data/spec/readers/datacite_json_reader_spec.rb +0 -82
  570. data/spec/readers/datacite_reader_spec.rb +0 -1812
  571. data/spec/readers/npm_reader_spec.rb +0 -68
  572. data/spec/readers/ris_reader_spec.rb +0 -78
  573. data/spec/readers/schema_org_reader_spec.rb +0 -344
  574. data/spec/spec_helper.rb +0 -95
  575. data/spec/utils_spec.rb +0 -666
  576. data/spec/writers/bibtex_writer_spec.rb +0 -195
  577. data/spec/writers/citation_writer_spec.rb +0 -61
  578. data/spec/writers/citeproc_writer_spec.rb +0 -290
  579. data/spec/writers/codemeta_writer_spec.rb +0 -45
  580. data/spec/writers/crosscite_writer_spec.rb +0 -129
  581. data/spec/writers/crossref_writer_spec.rb +0 -21
  582. data/spec/writers/csv_writer_spec.rb +0 -94
  583. data/spec/writers/datacite_json_writer_spec.rb +0 -112
  584. data/spec/writers/datacite_writer_spec.rb +0 -507
  585. data/spec/writers/jats_writer_spec.rb +0 -208
  586. data/spec/writers/rdf_xml_writer_spec.rb +0 -93
  587. data/spec/writers/ris_writer_spec.rb +0 -207
  588. data/spec/writers/schema_org_writer_spec.rb +0 -382
  589. data/spec/writers/turtle_writer_spec.rb +0 -102
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Minimal patch for csl-ruby and citeproc-ruby compatibility
4
+ # Root cause: 'contributor' is not recognized as a names variable in citeproc gem
5
+ # https://github.com/inukshuk/citeproc/blob/121fa4a950b9bd71960e42d20db96bcea1165201/lib/citeproc/variable.rb#L20-L24
6
+
7
+ module CiteProc
8
+ class Variable
9
+ # Unfreeze, modify, and refreeze the fields to add 'contributor' and 'accepted-date'
10
+ if @fields
11
+ # Unfreeze the fields hash temporarily
12
+ fields_dup = @fields.dup
13
+
14
+ # Add contributor to names (make a new unfrozen array)
15
+ fields_dup[:names] = (@fields[:names] + [:contributor]).uniq
16
+
17
+ # Add accepted-date to dates (make a new unfrozen array)
18
+ fields_dup[:date] = (@fields[:date] + [:'accepted-date']).uniq
19
+
20
+ # Rebuild the types mapping - only use actual type keys, not aliases like :all, :any, etc.
21
+ types_hash = Hash[*[:date, :names, :number, :text].map { |k| fields_dup[k].map { |n| [n, k] } }.flatten]
22
+
23
+ # Update the class instance variables
24
+ @fields = fields_dup
25
+ @types = Hash.new { |h,k| h.fetch(k.to_sym, nil) }.merge(types_hash).freeze
26
+
27
+ # Rebuild @factories from the new @types
28
+ # This maps each field name to its Variable subclass (Names, Date, Text, Number)
29
+ @factories = Hash.new { |h,k| h.fetch(k.to_s.intern, CiteProc::Variable) }.merge(
30
+ Hash[*@types.map { |field_name, type|
31
+ [field_name, CiteProc.const_get(type.to_s.capitalize)]
32
+ }.flatten]
33
+ ).freeze
34
+
35
+ # Recreate the aliases
36
+ @fields[:name] = @fields[:names]
37
+ @fields[:dates] = @fields[:date]
38
+ @fields[:numbers] = @fields[:number]
39
+
40
+ # Recreate :all and :any
41
+ @fields[:all] = @fields[:any] =
42
+ [:date, :names, :text, :number].reduce([]) { |s,a| s.concat(@fields[a]) }.sort
43
+
44
+ # Refreeze fields
45
+ @fields.freeze
46
+ end
47
+ end
48
+ end
@@ -69,7 +69,7 @@ module Bolognese
69
69
 
70
70
  xml.contributors do
71
71
  Array.wrap(contributors).each do |con|
72
- xml.contributor("contributorType" => con["contributorType"] || "Other") do
72
+ xml.contributor("contributorType" => con["contributorType"]) do
73
73
  insert_person(xml, con, "contributor")
74
74
  end
75
75
  end
@@ -128,7 +128,7 @@ module Bolognese
128
128
  def insert_resource_type(xml)
129
129
  return xml unless types.is_a?(Hash) && (types["schemaOrg"].present? || types["resourceTypeGeneral"])
130
130
 
131
- xml.resourceType(types["resourceType"] || types["schemaOrg"],
131
+ xml.resourceType(types["resourceType"],
132
132
  'resourceTypeGeneral' => types["resourceTypeGeneral"] || Metadata::SO_TO_DC_TRANSLATIONS[types["schemaOrg"]] || "Other")
133
133
  end
134
134
 
@@ -209,7 +209,9 @@ module Bolognese
209
209
  attributes = {
210
210
  'relatedIdentifierType' => related_identifier["relatedIdentifierType"],
211
211
  'relationType' => related_identifier["relationType"],
212
- 'resourceTypeGeneral' => related_identifier["resourceTypeGeneral"] }.compact
212
+ 'relationTypeInformation' => related_identifier["relationTypeInformation"],
213
+ 'resourceTypeGeneral' => related_identifier["resourceTypeGeneral",
214
+ ] }.compact
213
215
 
214
216
  attributes.merge({ 'relatedMetadataScheme' => related_identifier["relatedMetadataSchema"],
215
217
  'schemeURI' => related_identifier["schemeUri"],
@@ -228,6 +230,7 @@ module Bolognese
228
230
  attributes = {
229
231
  'relatedItemType' => related_item["relatedItemType"],
230
232
  'relationType' => related_item["relationType"],
233
+ 'relationTypeInformation' => related_item["relationTypeInformation"],
231
234
  }.compact
232
235
 
233
236
  xml.relatedItem(related_item["relatedItem"], attributes) do
@@ -337,7 +340,7 @@ module Bolognese
337
340
  return xml unless descriptions.present? || container && container["title"].present?
338
341
 
339
342
  xml.descriptions do
340
- if container && container["title"].present?
343
+ if (respond_to?(:from) && !from.to_s.include?("datacite")) && container && container["title"].present?
341
344
  issue = container["issue"].present? ? "(#{container["issue"]})" : nil
342
345
  volume_issue = container["volume"].present? ? [container["volume"], issue].join("") : nil
343
346
  pages = [container["firstPage"], container["lastPage"]].compact.join("-") if container["firstPage"].present?
@@ -387,9 +390,16 @@ module Bolognese
387
390
  if geo_location["geoLocationPolygon"]
388
391
  xml.geoLocationPolygon do
389
392
  Array.wrap(geo_location["geoLocationPolygon"]).each do |polygon_point|
390
- xml.polygonPoint do
391
- xml.pointLatitude(polygon_point.dig("polygonPoint", "pointLatitude"))
392
- xml.pointLongitude(polygon_point.dig("polygonPoint", "pointLongitude"))
393
+ if polygon_point.has_key?("polygonPoint")
394
+ xml.polygonPoint do
395
+ xml.pointLatitude(polygon_point.dig("polygonPoint", "pointLatitude"))
396
+ xml.pointLongitude(polygon_point.dig("polygonPoint", "pointLongitude"))
397
+ end
398
+ else
399
+ xml.inPolygonPoint do
400
+ xml.pointLatitude(polygon_point.dig("inPolygonPoint", "pointLatitude"))
401
+ xml.pointLongitude(polygon_point.dig("inPolygonPoint", "pointLongitude"))
402
+ end
393
403
  end
394
404
  end
395
405
  end
@@ -13,11 +13,12 @@ module Bolognese
13
13
  end
14
14
 
15
15
  def validate_funder_doi(doi)
16
- doi = Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.stage.datacite.org|handle.test.datacite.org)\/)?(doi:)?(10\.13039\/)?([1-9]\d+)\z/.match(doi)).last
16
+ match = Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.stage.datacite.org|handle.test.datacite.org)\/)?(doi:)?(10\.13039\/)?([1-9]\d+)\z/.match(doi)).last
17
+ return doi unless match
17
18
 
18
19
  # remove non-printing whitespace and downcase
19
- if doi.present?
20
- doi.delete("\u200B").downcase
20
+ if match.present?
21
+ doi = match.delete("\u200B").downcase
21
22
  "https://doi.org/10.13039/#{doi}"
22
23
  end
23
24
  end
@@ -1,10 +1,11 @@
1
- # frozen_string_literal: true
1
+ # frozen_string_literal: false
2
2
 
3
3
  require_relative 'metadata_utils'
4
4
 
5
5
  module Bolognese
6
6
  class Metadata
7
7
  include Bolognese::MetadataUtils
8
+ include Bolognese::Utils
8
9
 
9
10
  attr_accessor :string, :from, :sandbox, :meta, :regenerate, :issue, :show_errors
10
11
  attr_reader :doc, :page_start, :page_end
@@ -75,8 +76,8 @@ module Bolognese
75
76
  end
76
77
 
77
78
  # make sure input is encoded as utf8
78
- string = string.force_encoding("UTF-8") if string.present?
79
- @string = string
79
+ string1 = string.dup.force_encoding("UTF-8") if string.present?
80
+ @string = string1
80
81
 
81
82
  # input options for citation formatting
82
83
  @style = options[:style]
@@ -119,7 +120,7 @@ module Bolognese
119
120
 
120
121
  @regenerate = options[:regenerate] || read_options.present?
121
122
  # generate name for method to call dynamically
122
- opts = { string: string, sandbox: options[:sandbox], doi: options[:doi], id: id, ra: ra }.merge(read_options)
123
+ opts = { string: string1, sandbox: options[:sandbox], doi: options[:doi], id: id, ra: ra }.merge(read_options)
123
124
  @meta = @from.present? ? send("read_" + @from, **opts) : {}
124
125
  end
125
126
 
@@ -205,7 +206,9 @@ module Bolognese
205
206
  end
206
207
 
207
208
  def container
208
- @container ||= meta.fetch("container", nil)
209
+ @container ||= begin
210
+ generate_container(types, related_items, related_identifiers, descriptions) || meta.fetch("container", nil)
211
+ end
209
212
  end
210
213
 
211
214
  def geo_locations
@@ -33,7 +33,6 @@ require_relative 'writers/turtle_writer'
33
33
 
34
34
  module Bolognese
35
35
  module MetadataUtils
36
- # include BenchmarkMethods
37
36
  include Bolognese::DoiUtils
38
37
  include Bolognese::AuthorUtils
39
38
  include Bolognese::DataciteUtils
@@ -140,27 +139,43 @@ module Bolognese
140
139
  author = to_citeproc(creators)
141
140
  end
142
141
 
143
- if types["resourceTypeGeneral"] == "Software" && version_info.present?
144
- type = "book"
142
+ if types["resourceTypeGeneral"] == "Software"
143
+ type = "software"
145
144
  else
146
145
  type = types["citeproc"]
147
146
  end
148
147
 
148
+ # Filter out contributors who are already creators, editors, or translators to avoid duplication
149
+ creator_names = Array.wrap(creators).map { |c| c["name"] || [c["givenName"], c["familyName"]].compact.join(" ") }.compact
150
+ unique_contributors = Array.wrap(contributors).reject do |c|
151
+ contributor_name = c["name"] || [c["givenName"], c["familyName"]].compact.join(" ")
152
+ creator_names.include?(contributor_name) ||
153
+ c["contributorType"] == "Editor" ||
154
+ c["contributorType"] == "Translator"
155
+ end
156
+
149
157
  {
150
158
  "type" => type,
151
159
  "id" => normalize_doi(doi),
152
160
  "categories" => Array.wrap(subjects).map { |k| parse_attributes(k, content: "subject", first: true) }.presence,
153
161
  "language" => language,
154
162
  "author" => author,
155
- "contributor" => to_citeproc(contributors),
163
+ "contributor" => unique_contributors.presence ? to_citeproc(unique_contributors) : nil,
164
+ "editor" => contributors ? to_citeproc(contributors.select { |c| c["contributorType"] == "Editor" }) : nil,
165
+ "translator" => contributors ? to_citeproc(contributors.select { |c| c["contributorType"] == "Translator" }) : nil,
156
166
  "issued" => get_date(dates, "Issued") ? get_date_parts(get_date(dates, "Issued")) : get_date_parts(publication_year.to_s),
157
167
  "submitted" => Array.wrap(dates).find { |d| d["dateType"] == "Submitted" }.to_h.fetch("__content__", nil),
168
+ "available-date" => Array.wrap(dates).find { |d| d["dateType"] == "Available" }.to_h.fetch("__content__", nil),
158
169
  "abstract" => parse_attributes(descriptions, content: "description", first: true),
159
170
  "container-title" => container_title,
160
171
  "DOI" => doi,
161
172
  "volume" => container.to_h["volume"],
162
173
  "issue" => container.to_h["issue"],
174
+ "number" => container.to_h["number"],
175
+ "chapter-number" => container.to_h["chapterNumber"],
176
+ "edition" => container.to_h["edition"],
163
177
  "page" => page,
178
+ "page-first" => container.to_h["firstPage"],
164
179
  "publisher" => publisher["name"],
165
180
  "title" => parse_attributes(titles, content: "title", first: true),
166
181
  "URL" => url,
@@ -52,6 +52,12 @@ module Bolognese
52
52
  [{ "nameType" => "Organizational", "name" => ":(unav)" }]
53
53
  end
54
54
  contributors = get_authors(from_citeproc(Array.wrap(meta.fetch("editor", nil))))
55
+ translators = get_authors(from_citeproc(Array.wrap(meta.fetch("translator", nil))))
56
+ translators.each do |translator|
57
+ translator["contributorType"] = "Translator"
58
+ end
59
+ contributors += translators
60
+
55
61
  dates = if date = get_date_from_date_parts(meta.fetch("issued", nil))
56
62
  if Date.edtf(date).present?
57
63
  [{ "date" => date,
@@ -90,7 +96,7 @@ module Bolognese
90
96
 
91
97
  state = id.present? || read_options.present? ? "findable" : "not_found"
92
98
  subjects = Array.wrap(meta.fetch("categories", nil)).reduce([]) do |sum, subject|
93
- sum += name_to_fos(subject)
99
+ sum += name_to_subject(subject)
94
100
 
95
101
  sum
96
102
  end
@@ -55,7 +55,7 @@ module Bolognese
55
55
  "ris" => Bolognese::Utils::SO_TO_RIS_TRANSLATIONS[schema_org] || "GEN"
56
56
  }.compact
57
57
  subjects = Array.wrap(meta.fetch("tags", nil)).reduce([]) do |sum, subject|
58
- sum += name_to_fos(subject)
58
+ sum += name_to_subject(subject)
59
59
 
60
60
  sum
61
61
  end
@@ -4,6 +4,12 @@ module Bolognese
4
4
  module Readers
5
5
  module CrossrefReader
6
6
  # CrossRef types from https://api.crossref.org/types
7
+
8
+ CR_TO_DC_CONTRIBUTOR_TYPES = {
9
+ "editor" => "Editor",
10
+ "translator" => "Translator",
11
+ }
12
+
7
13
  def get_crossref(id: nil, **options)
8
14
  return { "string" => nil, "state" => "not_found" } unless id.present?
9
15
 
@@ -138,7 +144,7 @@ module Bolognese
138
144
 
139
145
  state = meta.present? || read_options.present? ? "findable" : "not_found"
140
146
 
141
- related_identifiers = Array.wrap(crossref_is_part_of(journal_metadata)) + Array.wrap(crossref_references(bibliographic_metadata))
147
+ related_identifiers = Array.wrap(crossref_is_part_of(journal_metadata)) + Array.wrap(crossref_references(bibliographic_metadata)) + Array.wrap(crossref_has_translation(program_metadata)) + Array.wrap(crossref_is_translation_of(program_metadata)) + Array.wrap(crossref_is_related_material(program_metadata))
142
148
 
143
149
  container = if journal_metadata.present?
144
150
  issn = normalize_issn(journal_metadata.to_h.fetch("issn", nil))
@@ -187,7 +193,7 @@ module Bolognese
187
193
  "titles" => titles,
188
194
  "identifiers" => identifiers,
189
195
  "creators" => crossref_people(bibliographic_metadata, "author"),
190
- "contributors" => crossref_people(bibliographic_metadata, "editor"),
196
+ "contributors" => crossref_people(bibliographic_metadata, "editor") + crossref_people(bibliographic_metadata, "translator"),
191
197
  "funding_references" => crossref_funding_reference(program_metadata),
192
198
  "publisher" => publisher,
193
199
  "container" => container,
@@ -282,10 +288,11 @@ module Bolognese
282
288
  "givenName" => given_name,
283
289
  "familyName" => family_name,
284
290
  "affiliation" => affiliation.presence,
285
- "contributorType" => contributor_role == "editor" ? "Editor" : nil }.compact
291
+ "contributorType" => contributor_role == 'author' ? nil : CR_TO_DC_CONTRIBUTOR_TYPES[a["contributor_role"]] }.compact
286
292
  else
287
293
  { "nameType" => "Organizational",
288
- "name" => a["name"] || a["__content__"] }
294
+ "name" => a["name"] || a["__content__"],
295
+ "contributorType" => contributor_role == 'author' ? nil : CR_TO_DC_CONTRIBUTOR_TYPES[a["contributor_role"]] }.compact
289
296
  end
290
297
  end
291
298
  end
@@ -362,6 +369,45 @@ module Bolognese
362
369
  end
363
370
  end.compact.unwrap
364
371
  end
372
+
373
+ def crossref_has_translation(program_metadata)
374
+ refs = program_metadata.dig("related_item") if program_metadata.is_a?(Hash)
375
+ Array.wrap(refs).select { |a| a.dig("intra_work_relation", "relationship_type") == "hasTranslation" }.map do |c|
376
+ if c.dig("intra_work_relation", "identifier_type") == "doi"
377
+ { "relatedIdentifier" => parse_attributes(c["intra_work_relation"]).downcase,
378
+ "relationType" => "HasTranslation",
379
+ "relatedIdentifierType" => "DOI" }.compact
380
+ else
381
+ nil
382
+ end
383
+ end.compact.unwrap
384
+ end
385
+
386
+ def crossref_is_translation_of(program_metadata)
387
+ refs = program_metadata.dig("related_item") if program_metadata.is_a?(Hash)
388
+ Array.wrap(refs).select { |a| a.dig("intra_work_relation", "relationship_type") == "isTranslationOf" }.map do |c|
389
+ if c.dig("intra_work_relation", "identifier_type") == "doi"
390
+ { "relatedIdentifier" => parse_attributes(c["intra_work_relation"]).downcase,
391
+ "relationType" => "IsTranslationOf",
392
+ "relatedIdentifierType" => "DOI" }.compact
393
+ else
394
+ nil
395
+ end
396
+ end.compact.unwrap
397
+ end
398
+
399
+ def crossref_is_related_material(program_metadata)
400
+ refs = program_metadata.dig("related_item") if program_metadata.is_a?(Hash)
401
+ Array.wrap(refs).select { |a| a.dig("interwork_relation", "relationship_type") == "isRelatedMaterial" }.map do |c|
402
+ if c.dig("inter_work_relation", "identifier_type") == "doi"
403
+ { "relatedIdentifier" => parse_attributes(c["inter_work_relation"]).downcase,
404
+ "relationType" => "Other",
405
+ "relatedIdentifierType" => "DOI" }.compact
406
+ else
407
+ nil
408
+ end
409
+ end.compact.unwrap
410
+ end
365
411
  end
366
412
  end
367
413
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
4
+
3
5
  module Bolognese
4
6
  module Readers
5
7
  module DataciteReader
@@ -131,9 +133,9 @@ module Bolognese
131
133
 
132
134
  subjects = Array.wrap(meta.dig("subjects", "subject")).reduce([]) do |sum, subject|
133
135
  if subject.is_a?(String)
134
- sum += name_to_fos(subject)
136
+ sum += name_to_subject(subject)
135
137
  elsif subject.is_a?(Hash)
136
- sum += hsh_to_fos(subject)
138
+ sum += hsh_to_subject(subject)
137
139
  end
138
140
 
139
141
  sum
@@ -141,15 +143,12 @@ module Bolognese
141
143
 
142
144
  dates = Array.wrap(meta.dig("dates", "date")).map do |r|
143
145
  if r.is_a?(Hash) && date = sanitize(r["__content__"]).presence
144
- if Date.edtf(date).present? || Bolognese::Utils::UNKNOWN_INFORMATION.key?(date)
145
- { "date" => date,
146
- "dateType" => parse_attributes(r, content: "dateType"),
147
- "dateInformation" => parse_attributes(r, content: "dateInformation")
148
- }.compact
149
- end
146
+ { "date" => date,
147
+ "dateType" => parse_attributes(r, content: "dateType"),
148
+ "dateInformation" => parse_attributes(r, content: "dateInformation")
149
+ }.compact
150
150
  end
151
151
  end.compact
152
- dates << { "date" => meta.fetch("publicationYear", nil), "dateType" => "Issued" } if meta.fetch("publicationYear", nil).present? && get_date(dates, "Issued").blank?
153
152
  sizes = Array.wrap(meta.dig("sizes", "size")).map do |k|
154
153
  if k.blank?
155
154
  nil
@@ -177,8 +176,7 @@ module Bolognese
177
176
  if funder_identifier_type == "Crossref Funder ID"
178
177
  funder_identifier = validate_funder_doi(funder_identifier)
179
178
  elsif funder_identifier_type == "ROR"
180
- funder_identifier = normalize_ror(funder_identifier)
181
- scheme_uri = "https://ror.org"
179
+ funder_identifier = normalize_ror(funder_identifier)
182
180
  else
183
181
  funder_identifier = normalize_id(funder_identifier) ? normalize_id(funder_identifier) : funder_identifier
184
182
  end
@@ -194,7 +192,8 @@ module Bolognese
194
192
  end
195
193
  related_identifiers = Array.wrap(meta.dig("relatedIdentifiers", "relatedIdentifier")).map do |ri|
196
194
  if ri["relatedIdentifierType"] == "DOI"
197
- rid = validate_doi(ri["__content__"].to_s.downcase)
195
+ doi = ri["__content__"].to_s.downcase
196
+ rid = validate_doi(doi) || doi
198
197
  else
199
198
  rid = ri["__content__"]
200
199
  end
@@ -206,7 +205,8 @@ module Bolognese
206
205
  "resourceTypeGeneral" => ri["resourceTypeGeneral"],
207
206
  "relatedMetadataScheme" => ri["relatedMetadataScheme"],
208
207
  "schemeUri" => ri["schemeURI"],
209
- "schemeType" => ri["schemeType"]
208
+ "schemeType" => ri["schemeType"],
209
+ "relationTypeInformation" => ri["relationTypeInformation"]
210
210
  }.compact
211
211
  end
212
212
 
@@ -216,7 +216,8 @@ module Bolognese
216
216
  relatedItemIdentifier = nil
217
217
  if rii
218
218
  if rii["relatedItemIdentifierType"] == "DOI"
219
- rid = validate_doi(rii["__content__"].to_s.downcase)
219
+ doi = rii["__content__"].to_s.downcase
220
+ rid = validate_doi(doi) || doi
220
221
  else
221
222
  rid = rii["__content__"]
222
223
  end
@@ -226,14 +227,13 @@ module Bolognese
226
227
  "relatedItemIdentifierType" => rii["relatedItemIdentifierType"],
227
228
  "relatedMetadataScheme" => rii["relatedMetadataScheme"],
228
229
  "schemeURI" => rii["schemeURI"],
229
- "schemeType" => rii["schemeType"]
230
+ "schemeType" => rii["schemeType"],
230
231
  }.compact
231
232
  end
232
233
 
233
234
  number = ri["number"]
234
235
  if number.is_a?(String)
235
236
  number = number
236
- numberType = nil
237
237
  else
238
238
  number = ri.dig("number", "__content__")
239
239
  numberType = ri.dig("number", "numberType")
@@ -241,6 +241,7 @@ module Bolognese
241
241
 
242
242
  a = {
243
243
  "relationType" => ri["relationType"],
244
+ "relationTypeInformation" => ri["relationTypeInformation"],
244
245
  "relatedItemType" => ri["relatedItemType"],
245
246
  "relatedItemIdentifier" => relatedItemIdentifier,
246
247
  "creators" => get_authors(Array.wrap(ri.dig("creators", "creator"))),
@@ -262,17 +263,13 @@ module Bolognese
262
263
  if !gl.is_a?(Hash) || gl["geoLocationPoint"].is_a?(String) || gl["geoLocationBox"].is_a?(String) || gl["geoLocationPolygon"].is_a?(String)
263
264
  nil
264
265
  else
265
-
266
- # Handle scenario where multiple geoLocationPolygons are allowed within a single geoLocation
267
- # we want to return an array if it's already an array (i.e. multiple geoLocationPolygons)
268
- # vs if it's singular just return the object
269
- # This is for backwards compatability to allow both scenarios.
266
+ ## Array of geoLocationPolygons within a geoLocation is Unsupported in JSON.
270
267
  if gl.dig("geoLocationPolygon").kind_of?(Array)
271
- geoLocationPolygon = gl.dig("geoLocationPolygon").map do |glp|
272
- Array.wrap(glp.dig("polygonPoint")).map { |glpp| { "polygonPoint" => glpp } }.compact.presence
273
- end.compact.presence
268
+ geoLocationPolygon = nil
274
269
  else
275
- geoLocationPolygon = Array.wrap(gl.dig("geoLocationPolygon", "polygonPoint")).map { |glp| { "polygonPoint" => glp } }.compact.presence
270
+ geoLocationPolygon = Array.wrap(gl.dig("geoLocationPolygon", "polygonPoint")).map { |glp| { "polygonPoint" => glp } }
271
+ .push(Array.wrap(gl.dig("geoLocationPolygon", "inPolygonPoint")).map { |glp| { "inPolygonPoint" => glp } }.first)
272
+ .compact.presence
276
273
  end
277
274
 
278
275
  {
@@ -302,7 +299,6 @@ module Bolognese
302
299
  "titles" => titles,
303
300
  "creators" => get_authors(Array.wrap(meta.dig("creators", "creator"))),
304
301
  "contributors" => get_authors(Array.wrap(meta.dig("contributors", "contributor"))),
305
- "container" => set_container(meta),
306
302
  "publisher" => publisher,
307
303
  "agency" => "datacite",
308
304
  "funding_references" => funding_references,
@@ -323,28 +319,6 @@ module Bolognese
323
319
  }.merge(read_options)
324
320
  end
325
321
 
326
- def set_container(meta)
327
- series_information = Array.wrap(meta.dig("descriptions", "description")).find { |r| r["descriptionType"] == "SeriesInformation" }.to_h.fetch("__content__", nil)
328
- si = get_series_information(series_information)
329
-
330
- is_part_of = Array.wrap(meta.dig("relatedIdentifiers", "relatedIdentifier")).find { |ri| ri["relationType"] == "IsPartOf" }.to_h
331
-
332
- if si["title"].present? || is_part_of.present?
333
- {
334
- "type" => meta.dig("resourceType", "resourceTypeGeneral") == "Dataset" ? "DataRepository" : "Series",
335
- "identifier" => is_part_of["__content__"],
336
- "identifierType" => is_part_of["relatedIdentifierType"],
337
- "title" => si["title"],
338
- "volume" => si["volume"],
339
- "issue" => si["issue"],
340
- "firstPage" => si["firstPage"],
341
- "lastPage" => si["lastPage"]
342
- }.compact
343
- else
344
- {}
345
- end
346
- end
347
-
348
322
  def get_titles(meta)
349
323
  titles = Array.wrap(meta.dig("titles", "title")).map do |r|
350
324
  if r.blank?
@@ -78,7 +78,7 @@ module Bolognese
78
78
  end
79
79
  state = meta.fetch("DO", nil).present? || read_options.present? ? "findable" : "not_found"
80
80
  subjects = Array.wrap(meta.fetch("KW", nil)).reduce([]) do |sum, subject|
81
- sum += name_to_fos(subject)
81
+ sum += name_to_subject(subject)
82
82
 
83
83
  sum
84
84
  end
@@ -10,7 +10,9 @@ module Bolognese
10
10
  "isPartOf" => "IsPartOf",
11
11
  "hasPart" => "HasPart",
12
12
  "isPredecessor" => "IsPreviousVersionOf",
13
- "isSuccessor" => "IsNewVersionOf"
13
+ "isSuccessor" => "IsNewVersionOf",
14
+ "workTranslation" => "HasTranslation",
15
+ "translationOfWork" => "IsTranslationOf"
14
16
  }
15
17
 
16
18
  SO_TO_DC_REVERSE_RELATION_TYPES = {
@@ -74,6 +76,12 @@ module Bolognese
74
76
  creators = get_authors(from_schema_org_creators(Array.wrap(authors)))
75
77
  end
76
78
  contributors = get_authors(from_schema_org_contributors(Array.wrap(meta.fetch("editor", nil))))
79
+ translators = get_authors(from_schema_org_contributors(Array.wrap(meta.fetch("translator", nil))))
80
+ translators.map! do |translator|
81
+ translator["contributorType"] = "Translator"
82
+ translator
83
+ end
84
+ contributors += translators
77
85
 
78
86
  publisher = {
79
87
  "name" => parse_attributes(meta.fetch("publisher", nil), content: "name", first: true),
@@ -106,7 +114,9 @@ module Bolognese
106
114
  Array.wrap(schema_org_references(meta)) +
107
115
  Array.wrap(schema_org_is_referenced_by(meta)) +
108
116
  Array.wrap(schema_org_is_supplement_to(meta)) +
109
- Array.wrap(schema_org_is_supplemented_by(meta))
117
+ Array.wrap(schema_org_is_supplemented_by(meta)) +
118
+ Array.wrap(schema_org_has_translation(meta)) +
119
+ Array.wrap(schema_org_is_translation_of(meta))
110
120
 
111
121
  rights_list = Array.wrap(meta.fetch("license", nil)).compact.map do |rl|
112
122
  hsh_to_spdx("__content__" => rl["name"], "rightsURI" => rl["id"])
@@ -127,6 +137,7 @@ module Bolognese
127
137
  dates << { "date" => meta.fetch("datePublished"), "dateType" => "Issued" } if Date.edtf(meta.fetch("datePublished", nil)).present?
128
138
  dates << { "date" => meta.fetch("dateCreated"), "dateType" => "Created" } if Date.edtf(meta.fetch("dateCreated", nil)).present?
129
139
  dates << { "date" => meta.fetch("dateModified"), "dateType" => "Updated" } if Date.edtf(meta.fetch("dateModified", nil)).present?
140
+ dates << { "date" => meta.fetch("temporalCoverage"), "dateType" => "Coverage" } if Date.edtf(meta.fetch("temporalCoverage", nil)).present?
130
141
  publication_year = meta.fetch("datePublished")[0..3] if meta.fetch("datePublished", nil).present?
131
142
 
132
143
  if meta.fetch("inLanguage", nil).is_a?(String)
@@ -163,7 +174,7 @@ module Bolognese
163
174
  subjects = meta.fetch("keywords", nil)
164
175
  subjects = subjects.to_s.split(", ") if subjects.is_a?(String)
165
176
  subjects = Array.wrap(subjects).reduce([]) do |sum, subject|
166
- sum += name_to_fos(subject)
177
+ sum += name_to_subject(subject)
167
178
  sum
168
179
  end
169
180
 
@@ -240,6 +251,14 @@ module Bolognese
240
251
  schema_org_related_identifier(meta, relation_type: "isBasedOn")
241
252
  end
242
253
 
254
+ def schema_org_has_translation(meta)
255
+ schema_org_related_identifier(meta, relation_type: "workTranslation", )
256
+ end
257
+
258
+ def schema_org_is_translation_of(meta)
259
+ schema_org_related_identifier(meta, relation_type: "translationOfWork")
260
+ end
261
+
243
262
  end
244
263
  end
245
264
  end