bolognese 1.3.1 → 2.3.9
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.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +9 -0
- data/.github/workflows/changelog.yml +36 -0
- data/.github/workflows/ci.yml +22 -0
- data/.github/workflows/pull-request.yml +9 -0
- data/.github/workflows/release.yml +32 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +658 -0
- data/CHANGELOG.md +1864 -0
- data/Gemfile.lock +163 -129
- data/README.md +3 -2
- data/bolognese.gemspec +22 -20
- data/lib/bolognese/author_utils.rb +49 -25
- data/lib/bolognese/cli.rb +6 -4
- data/lib/bolognese/datacite_utils.rb +143 -17
- data/lib/bolognese/doi_utils.rb +14 -9
- data/lib/bolognese/metadata.rb +27 -19
- data/lib/bolognese/metadata_utils.rb +25 -6
- data/lib/bolognese/readers/bibtex_reader.rb +29 -34
- data/lib/bolognese/readers/citeproc_reader.rb +27 -35
- data/lib/bolognese/readers/codemeta_reader.rb +12 -13
- data/lib/bolognese/readers/crosscite_reader.rb +4 -1
- data/lib/bolognese/readers/crossref_reader.rb +163 -67
- data/lib/bolognese/readers/datacite_json_reader.rb +4 -1
- data/lib/bolognese/readers/datacite_reader.rb +150 -38
- data/lib/bolognese/readers/npm_reader.rb +115 -0
- data/lib/bolognese/readers/ris_reader.rb +10 -14
- data/lib/bolognese/readers/schema_org_reader.rb +58 -25
- data/lib/bolognese/utils.rb +502 -63
- data/lib/bolognese/version.rb +1 -1
- data/lib/bolognese/writers/bibtex_writer.rb +4 -3
- data/lib/bolognese/writers/codemeta_writer.rb +6 -5
- data/lib/bolognese/writers/csv_writer.rb +1 -1
- data/lib/bolognese/writers/datacite_json_writer.rb +3 -1
- data/lib/bolognese/writers/jats_writer.rb +9 -4
- data/lib/bolognese/writers/ris_writer.rb +2 -2
- data/lib/bolognese/writers/schema_org_writer.rb +11 -7
- data/lib/bolognese.rb +2 -1
- data/package.json +12 -0
- data/resources/kernel-4/include/datacite-contributorType-v4.xsd +24 -22
- data/resources/kernel-4/include/datacite-dateType-v4.xsd +14 -12
- data/resources/kernel-4/include/datacite-descriptionType-v4.xsd +6 -6
- data/resources/kernel-4/include/datacite-funderIdentifierType-v4.xsd +5 -5
- data/resources/kernel-4/include/datacite-nameType-v4.xsd +2 -2
- data/resources/kernel-4/include/datacite-numberType-v4.xsd +12 -0
- data/resources/kernel-4/include/datacite-relatedIdentifierType-v4.xsd +24 -21
- data/resources/kernel-4/include/datacite-relationType-v4.xsd +43 -35
- data/resources/kernel-4/include/datacite-resourceType-v4.xsd +38 -17
- data/resources/kernel-4/include/datacite-titleType-v4.xsd +5 -5
- data/resources/kernel-4/metadata.xsd +349 -146
- data/resources/kernel-4.3/metadata.xsd +39 -8
- data/resources/kernel-4.4/include/datacite-contributorType-v4.xsd +35 -0
- data/resources/kernel-4.4/include/datacite-dateType-v4.xsd +25 -0
- data/resources/kernel-4.4/include/datacite-descriptionType-v4.xsd +19 -0
- data/resources/kernel-4.4/include/datacite-funderIdentifierType-v4.xsd +16 -0
- data/resources/kernel-4.4/include/datacite-nameType-v4.xsd +10 -0
- data/resources/kernel-4.4/include/datacite-numberType-v4.xsd +12 -0
- data/resources/kernel-4.4/include/datacite-relatedIdentifierType-v4.xsd +34 -0
- data/resources/kernel-4.4/include/datacite-relationType-v4.xsd +51 -0
- data/resources/kernel-4.4/include/datacite-resourceType-v4.xsd +43 -0
- data/resources/kernel-4.4/include/datacite-titleType-v4.xsd +14 -0
- data/resources/kernel-4.4/include/xml.xsd +286 -0
- data/resources/kernel-4.4/metadata.xsd +707 -0
- data/resources/kernel-4.5/include/datacite-contributorType-v4.xsd +35 -0
- data/resources/kernel-4.5/include/datacite-dateType-v4.xsd +25 -0
- data/resources/kernel-4.5/include/datacite-descriptionType-v4.xsd +19 -0
- data/resources/kernel-4.5/include/datacite-funderIdentifierType-v4.xsd +16 -0
- data/resources/kernel-4.5/include/datacite-nameType-v4.xsd +10 -0
- data/resources/kernel-4.5/include/datacite-numberType-v4.xsd +12 -0
- data/resources/kernel-4.5/include/datacite-relatedIdentifierType-v4.xsd +34 -0
- data/resources/kernel-4.5/include/datacite-relationType-v4.xsd +53 -0
- data/resources/kernel-4.5/include/datacite-resourceType-v4.xsd +45 -0
- data/resources/kernel-4.5/include/datacite-titleType-v4.xsd +14 -0
- data/resources/kernel-4.5/include/xml.xsd +286 -0
- data/resources/kernel-4.5/metadata.xsd +711 -0
- data/resources/kernel-4.6/include/datacite-contributorType-v4.xsd +37 -0
- data/resources/kernel-4.6/include/datacite-dateType-v4.xsd +27 -0
- data/resources/kernel-4.6/include/datacite-descriptionType-v4.xsd +19 -0
- data/resources/kernel-4.6/include/datacite-funderIdentifierType-v4.xsd +16 -0
- data/resources/kernel-4.6/include/datacite-nameType-v4.xsd +10 -0
- data/resources/kernel-4.6/include/datacite-numberType-v4.xsd +12 -0
- data/resources/kernel-4.6/include/datacite-relatedIdentifierType-v4.xsd +37 -0
- data/resources/kernel-4.6/include/datacite-relationType-v4.xsd +57 -0
- data/resources/kernel-4.6/include/datacite-resourceType-v4.xsd +49 -0
- data/resources/kernel-4.6/include/datacite-titleType-v4.xsd +14 -0
- data/resources/kernel-4.6/include/xml.xsd +286 -0
- data/resources/kernel-4.6/metadata.xsd +712 -0
- data/resources/oecd/dfg-mappings.json +1866 -0
- data/resources/oecd/for-mappings.json +1101 -0
- data/resources/oecd/fos-mappings.json +198 -0
- data/resources/schema_org/jsonldcontext.json +1069 -232
- data/resources/spdx/licenses.json +5297 -0
- metadata +160 -510
- data/.travis.yml +0 -33
- data/spec/array_spec.rb +0 -22
- data/spec/author_utils_spec.rb +0 -188
- data/spec/cli_spec.rb +0 -219
- data/spec/datacite_utils_spec.rb +0 -148
- data/spec/doi_utils_spec.rb +0 -302
- data/spec/find_from_format_spec.rb +0 -98
- data/spec/fixtures/aida.json +0 -82
- data/spec/fixtures/citeproc-no-author.json +0 -26
- data/spec/fixtures/citeproc-no-categories.json +0 -21
- data/spec/fixtures/citeproc.json +0 -30
- data/spec/fixtures/codemeta.json +0 -86
- data/spec/fixtures/codemeta_v2.json +0 -86
- data/spec/fixtures/crosscite.json +0 -63
- data/spec/fixtures/crossref.bib +0 -14
- data/spec/fixtures/crossref.ris +0 -15
- data/spec/fixtures/crossref.xml +0 -606
- data/spec/fixtures/datacite-example-affiliation.xml +0 -114
- data/spec/fixtures/datacite-example-complicated-v3.0.xml +0 -48
- data/spec/fixtures/datacite-example-complicated-v4.0.xml +0 -54
- data/spec/fixtures/datacite-example-complicated-v4.1.xml +0 -57
- data/spec/fixtures/datacite-example-geolocation-2.xml +0 -141
- data/spec/fixtures/datacite-example-geolocation.xml +0 -66
- data/spec/fixtures/datacite-example-polygon-v4.1.xml +0 -163
- data/spec/fixtures/datacite-geolocation-empty.xml +0 -159
- data/spec/fixtures/datacite-metadata-sample-complicated-v2.2.xml +0 -52
- data/spec/fixtures/datacite-multiple-language.xml +0 -38
- data/spec/fixtures/datacite-multiple-rights.xml +0 -59
- data/spec/fixtures/datacite-seriesinformation.xml +0 -41
- data/spec/fixtures/datacite-xml-lang.xml +0 -51
- data/spec/fixtures/datacite.json +0 -83
- data/spec/fixtures/datacite.xml +0 -40
- data/spec/fixtures/datacite_dataset.xml +0 -58
- data/spec/fixtures/datacite_malformed_creator.xml +0 -52
- data/spec/fixtures/datacite_missing_creator.xml +0 -33
- data/spec/fixtures/datacite_schema_3.xml +0 -58
- data/spec/fixtures/datacite_software.json +0 -21
- data/spec/fixtures/datacite_software_missing_comma.json +0 -18
- data/spec/fixtures/datacite_software_overlapping_keys.json +0 -18
- data/spec/fixtures/funding_reference.xml +0 -53
- data/spec/fixtures/gtex.xml +0 -71
- data/spec/fixtures/maremma/codemeta.json +0 -36
- data/spec/fixtures/nist.xml +0 -35
- data/spec/fixtures/ns0.xml +0 -2
- data/spec/fixtures/pure.bib +0 -14
- data/spec/fixtures/pure.ris +0 -15
- data/spec/fixtures/ris_bug.ris +0 -9
- data/spec/fixtures/schema_4.0.xml +0 -140
- data/spec/fixtures/schema_org.json +0 -44
- data/spec/fixtures/schema_org_geolocation.json +0 -82
- data/spec/fixtures/schema_org_geoshape.json +0 -550
- data/spec/fixtures/schema_org_gtex.json +0 -76
- data/spec/fixtures/schema_org_list.json +0 -12628
- data/spec/fixtures/schema_org_tdl_iodp_invalid_authors.json +0 -25
- data/spec/fixtures/schema_org_topmed.json +0 -54
- data/spec/fixtures/schema_org_type_as_array.json +0 -41
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/default.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_bibtex.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_citation.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_crossref.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_datacite.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_jats.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_schema_org.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/default.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_bibtex.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_citation.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_datacite.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_datacite_json.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_jats.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_schema_org.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/default.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_bibtex.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_datacite.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/crossref.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/datacite.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/jalc.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/kisti.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/medra.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/find_from_format_by_id/op.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/author.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/no_author.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/single_author.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/authors_as_string/with_organization.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_datacite_metadata/change_state.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_datacite_metadata/change_title.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_description.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_license.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_license_name.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_license_url.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/change_state.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/validates_against_schema.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/change_metadata_as_datacite_xml/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/doi_with_protocol.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/dx_doi_org_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/force_test_resolver.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/https_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/test_resolver.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_api_url/test_resolver_http.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/doi_with_special_characters.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/not_a_doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/sandbox_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_from_url/url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/crossref.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/datacite.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/jalc.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/kisti.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/medra.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/not_a_valid_prefix.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/not_found.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_registration_agency/op.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/doi_with_protocol.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/dx_doi_org_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/force_test_resolver.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/https_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/test_resolver.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/doi_resolver/test_resolver_http.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/crossref.yml +0 -143
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/crossref_doi_not_url.yml +0 -143
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/datacite.yml +0 -143
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/datacite_doi_http.yml +0 -143
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/github.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/orcid.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/schema_org.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/unknown_DOI_registration_agency.yml +0 -143
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/bibtex.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/citeproc.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/codemeta.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/crosscite.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/crossref.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/datacite.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/datacite_json.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/ris.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_file/schema_org.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_from_string/crosscite.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/from_schema_org/with_id.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_codemeta_metadata/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_codemeta_metadata/metadata_reports.yml +0 -94
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/DOI_with_ORCID_ID.yml +0 -92
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/DOI_with_SICI_DOI.yml +0 -91
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/DOI_with_data_citation.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/JaLC.yml +0 -126
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/KISTI.yml +0 -147
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/OP.yml +0 -89
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/another_book.yml +0 -127
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/another_book_chapter.yml +0 -89
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/book.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/book_chapter.yml +0 -159
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/component.yml +0 -109
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/dataset.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/dataset_usda.yml +0 -129
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/date_in_future.yml +0 -90
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/error_unknown.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/jj.yml +0 -87
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article.yml +0 -89
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_original_language_title.yml +0 -87
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with_funding.yml +0 -89
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_issue.yml +0 -116
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/mEDRA.yml +0 -125
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/markup.yml +0 -92
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/missing_creator.yml +0 -89
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_t.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/multiple_titles.yml +0 -87
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/not_found_error.yml +0 -86
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/vor_with_url.yml +0 -91
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/yet_another_book.yml +0 -87
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/yet_another_book_chapter.yml +0 -88
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/BlogPosting.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_test_system.yml +0 -100
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_test_system_schema_3.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_with_related_id_system.yml +0 -110
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_not_found.yml +0 -89
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Dataset.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding_empty_awardTitle.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding_schema_version_4.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Referee_report_in_test_system.yml +0 -97
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/author_only_full_name.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/author_with_scheme.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/author_with_wrong_orcid_scheme.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/content_url.yml +0 -101
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/date.yml +0 -106
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/dissertation.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/doi_with_sign.yml +0 -97
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/empty_subject.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/funding_schema_version_3.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/is_identical_to.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/keywords_with_attributes.yml +0 -108
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/leading_and_trailing_whitespace.yml +0 -121
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/multiple_author_names_in_one_creatorsName.yml +0 -102
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/multiple_licenses.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/series-information.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/subject_scheme.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/xs_string_attributes.yml +0 -93
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date/publication_date.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_date_parts/date.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_date_parts/year-month.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_date_parts/year.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_parts/date.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_parts/year-month.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_from_parts/year.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_parts/date.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_parts/year-month.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_date_parts/year.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_familyName.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_Thai.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_display-order.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_display-order_with_ORCID.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/has_name_in_sort-order.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/hyper-authorship.yml +0 -1222
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/is_organization.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/multiple_author_names_in_one_field.yml +0 -58
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/multiple_name_identifier.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/name_with_affiliation.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/name_with_affiliation_and_country.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/name_with_role.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_one_author/only_familyName_and_givenName.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/BlogPosting.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/BlogPosting_with_new_DOI.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/harvard_dataverse.yml +0 -37
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/harvard_dataverse_via_identifiers_org.yml +0 -156
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/ornl.yml +0 -704
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/pangaea.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_schema_org_metadata/zenodo.yml +0 -580
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/only_title.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/title_and_pages.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/title_volume_and_pages.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_series_information/title_volume_issue_and_pages.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/github/github_as_codemeta_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/github/github_from_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/github/github_from_url_file.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/handle_input/DOI_RA_not_Crossref_or_DataCite.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/handle_input/unknown_DOI_prefix.yml +0 -47
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_alternate_identifiers/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_contributors/none.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_creators/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_descriptions/insert.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_identifier/doi.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_person/creator_only_name.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_publication_year/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_publisher/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_related_identifiers/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_related_identifiers/related_identifier.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_resource_type/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_rights_list/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_subjects/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_titles/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/insert_version/insert.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_comma.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_family_name.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_id.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_known_given_name.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_no_info.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_orcid_id.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/is_personal_name_/has_type_organization.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/missing_comma.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/nil.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/overlapping_keys.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/jsonlint/valid.yml +0 -99
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/SICI_doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_force_datacite_sandbox.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_from_datacite_sandbox.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_from_url_without_doi_proxy.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_prefix_too_long.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_prefix_with_string.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/doi_with_protocol.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/dx_doi_org_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/https_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/not_valid_doi_prefix.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_doi/url_with_one_slash.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/doi_as_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/ftp.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/invalid_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/sandbox_via_options.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/sandbox_via_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/string.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_id/url_with_utf-8.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_ids/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_ids/url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_array.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_empty_array.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_hash.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_issn/from_string.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_url/uri.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/normalize_url/with_trailing_slash.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/array.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/array_of_strings.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/first.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/hash.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/nil.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/string.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/sanitize/should_only_keep_specific_tags.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/sanitize/should_remove_a_tags.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/to_schema_org/with_id.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/to_schema_org_identifiers/with_identifiers.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_doi/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/funder_doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/funder_doi_without_prefix.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_funder_doi/non-funder_doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_https.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_id.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_with_spaces.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_wrong_id.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid/validate_orcid_www.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme_https.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme_trailing_slash.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_orcid_scheme/validate_orcid_scheme_www.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/doi.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/doi_as_url.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/doi_with_protocol.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_prefix/only_prefix.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/DOI.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/ISSN.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/URL.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/validate_url/string.yml +0 -44
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/BlogPosting.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/Dataset.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/authors_with_affiliations.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/climate_data.yml +0 -52
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/from_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/keywords_subject_scheme.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/text.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_bibtex/with_pages.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Dataset.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Journal_article.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citation/Missing_author.yml +0 -45
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/BlogPosting.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/BlogPosting_schema_org.yml +0 -109
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/Dataset.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/container_title.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/journal_article.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/keywords_subject_scheme.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/missing_creator.yml +0 -45
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/multiple_abstracts.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/software.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/with_first_page.yml +0 -46
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/with_only_first_page.yml +0 -46
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/with_pages.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_codemeta/SoftwareSourceCode_DataCite.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_codemeta/SoftwareSourceCode_DataCite_check_codemeta_v2.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/datacite_database_attributes.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/with_ORCID_ID.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crosscite/with_data_citation_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_crossref/from_DataCite.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/climate_data.yml +0 -52
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/text.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_csv/with_pages.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/with_ORCID_ID.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_json/with_data_citation_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/DOI_not_found.yml +0 -45
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/Dataset_in_schema_4_0.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/Text_pass-thru.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/Text_pass-thru_with_doi_in_options.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_ORCID_ID.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_data_citation_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_datacite_xml/with_editor.yml +0 -45
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/Dataset_in_schema_4_0.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/Text_pass-thru.yml +0 -81
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/book_chapter.yml +0 -84
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_ORCID_ID.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_data_citation.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_data_citation_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_jats_xml/with_editor.yml +0 -45
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/BlogPosting.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/BlogPosting_schema_org.yml +0 -111
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/Dataset.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/alternate_name.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/journal_article.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/keywords_with_subject_scheme.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/maremma.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/with_pages.yml +0 -48
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Funding.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Funding_OpenAIRE.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_IsSupplementTo.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/Schema_org_JSON_isReferencedBy.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/alternate_identifiers.yml +0 -57
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/data_catalog.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/geo_location_box.yml +0 -98
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/journal_article.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/maremma_schema_org_JSON.yml +0 -73
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/series_information.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/subject_scheme.yml +0 -49
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_schema_org/subject_scheme_multiple_keywords.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_turtle/Dataset.yml +0 -49
- data/spec/fixtures/vivli.xml +0 -1
- data/spec/metadata_spec.rb +0 -165
- data/spec/readers/bibtex_reader_spec.rb +0 -59
- data/spec/readers/citeproc_reader_spec.rb +0 -61
- data/spec/readers/codemeta_reader_spec.rb +0 -117
- data/spec/readers/crosscite_reader_spec.rb +0 -41
- data/spec/readers/crossref_reader_spec.rb +0 -509
- data/spec/readers/datacite_json_reader_spec.rb +0 -61
- data/spec/readers/datacite_reader_spec.rb +0 -1041
- data/spec/readers/ris_reader_spec.rb +0 -73
- data/spec/readers/schema_org_reader_spec.rb +0 -325
- data/spec/spec_helper.rb +0 -94
- data/spec/utils_spec.rb +0 -417
- data/spec/writers/bibtex_writer_spec.rb +0 -163
- data/spec/writers/citation_writer_spec.rb +0 -35
- data/spec/writers/citeproc_writer_spec.rb +0 -223
- data/spec/writers/codemeta_writer_spec.rb +0 -46
- data/spec/writers/crosscite_writer_spec.rb +0 -118
- data/spec/writers/crossref_writer_spec.rb +0 -21
- data/spec/writers/csv_writer_spec.rb +0 -93
- data/spec/writers/datacite_json_writer_spec.rb +0 -86
- data/spec/writers/datacite_writer_spec.rb +0 -366
- data/spec/writers/jats_writer_spec.rb +0 -179
- data/spec/writers/rdf_xml_writer_spec.rb +0 -100
- data/spec/writers/ris_writer_spec.rb +0 -203
- data/spec/writers/schema_org_writer_spec.rb +0 -322
- data/spec/writers/turtle_writer_spec.rb +0 -84
|
@@ -11,7 +11,13 @@ module Bolognese
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def datacite_errors(xml: nil, schema_version: nil)
|
|
14
|
-
|
|
14
|
+
if xml.present?
|
|
15
|
+
namespaces = Nokogiri::XML(xml, nil, 'UTF-8').root.namespaces
|
|
16
|
+
schema_version = namespaces.fetch('xmlns',nil).presence || namespaces.fetch('xmlns:ns0',nil).presence
|
|
17
|
+
else
|
|
18
|
+
schema_version = schema_version.to_s.start_with?("http://datacite.org/schema/kernel") ? schema_version : "http://datacite.org/schema/kernel-4"
|
|
19
|
+
end
|
|
20
|
+
|
|
15
21
|
kernel = schema_version.to_s.split("/").last
|
|
16
22
|
filepath = File.expand_path("../../../resources/#{kernel}/metadata.xsd", __FILE__)
|
|
17
23
|
schema = Nokogiri::XML::Schema(open(filepath))
|
|
@@ -28,11 +34,15 @@ module Bolognese
|
|
|
28
34
|
insert_publisher(xml)
|
|
29
35
|
insert_publication_year(xml)
|
|
30
36
|
insert_resource_type(xml)
|
|
31
|
-
insert_alternate_identifiers(xml)
|
|
32
37
|
insert_subjects(xml)
|
|
33
38
|
insert_contributors(xml)
|
|
34
39
|
insert_dates(xml)
|
|
40
|
+
insert_language(xml)
|
|
41
|
+
insert_alternate_identifiers(xml)
|
|
35
42
|
insert_related_identifiers(xml)
|
|
43
|
+
insert_related_items(xml)
|
|
44
|
+
insert_sizes(xml)
|
|
45
|
+
insert_formats(xml)
|
|
36
46
|
insert_version(xml)
|
|
37
47
|
insert_rights_list(xml)
|
|
38
48
|
insert_descriptions(xml)
|
|
@@ -59,7 +69,7 @@ module Bolognese
|
|
|
59
69
|
|
|
60
70
|
xml.contributors do
|
|
61
71
|
Array.wrap(contributors).each do |con|
|
|
62
|
-
xml.contributor("contributorType" => con["contributorType"]
|
|
72
|
+
xml.contributor("contributorType" => con["contributorType"]) do
|
|
63
73
|
insert_person(xml, con, "contributor")
|
|
64
74
|
end
|
|
65
75
|
end
|
|
@@ -76,8 +86,8 @@ module Bolognese
|
|
|
76
86
|
xml.nameIdentifier(ni["nameIdentifier"], 'nameIdentifierScheme' => ni["nameIdentifierScheme"], 'schemeURI' => ni["schemeUri"])
|
|
77
87
|
end
|
|
78
88
|
Array.wrap(person["affiliation"]).each do |affiliation|
|
|
79
|
-
attributes = { "affiliationIdentifierScheme" => affiliation["affiliationIdentifierScheme"], "schemeURI" => affiliation["schemeUri"] }.compact
|
|
80
|
-
xml.affiliation(affiliation["name"], attributes)
|
|
89
|
+
attributes = { "affiliationIdentifier" => affiliation["affiliationIdentifier"], "affiliationIdentifierScheme" => affiliation["affiliationIdentifierScheme"], "schemeURI" => affiliation["schemeUri"] }.compact
|
|
90
|
+
xml.affiliation(affiliation["name"], attributes)
|
|
81
91
|
end
|
|
82
92
|
end
|
|
83
93
|
|
|
@@ -96,9 +106,19 @@ module Bolognese
|
|
|
96
106
|
end
|
|
97
107
|
end
|
|
98
108
|
end
|
|
99
|
-
|
|
109
|
+
|
|
100
110
|
def insert_publisher(xml)
|
|
101
|
-
|
|
111
|
+
if publisher.is_a?(Hash)
|
|
112
|
+
attributes = {
|
|
113
|
+
'publisherIdentifier' => publisher["publisherIdentifier"],
|
|
114
|
+
'publisherIdentifierScheme' => publisher["publisherIdentifierScheme"],
|
|
115
|
+
'schemeURI' => publisher["schemeUri"],
|
|
116
|
+
"xml:lang" => publisher["lang"]
|
|
117
|
+
}.compact
|
|
118
|
+
xml.publisher(publisher["name"] || container && container["title"], attributes)
|
|
119
|
+
else
|
|
120
|
+
xml.publisher(publisher || container && container["title"])
|
|
121
|
+
end
|
|
102
122
|
end
|
|
103
123
|
|
|
104
124
|
def insert_publication_year(xml)
|
|
@@ -108,7 +128,7 @@ module Bolognese
|
|
|
108
128
|
def insert_resource_type(xml)
|
|
109
129
|
return xml unless types.is_a?(Hash) && (types["schemaOrg"].present? || types["resourceTypeGeneral"])
|
|
110
130
|
|
|
111
|
-
xml.resourceType(types["resourceType"]
|
|
131
|
+
xml.resourceType(types["resourceType"],
|
|
112
132
|
'resourceTypeGeneral' => types["resourceTypeGeneral"] || Metadata::SO_TO_DC_TRANSLATIONS[types["schemaOrg"]] || "Other")
|
|
113
133
|
end
|
|
114
134
|
|
|
@@ -161,7 +181,7 @@ module Bolognese
|
|
|
161
181
|
s["subject"] = subject
|
|
162
182
|
end
|
|
163
183
|
|
|
164
|
-
attributes = { "subjectScheme" => s["subjectScheme"], "schemeURI" => s["schemeUri"], "valueURI" => s["valueUri"], "xml:lang" => s["lang"] }.compact
|
|
184
|
+
attributes = { "subjectScheme" => s["subjectScheme"], "schemeURI" => s["schemeUri"], "valueURI" => s["valueUri"], "classificationCode" => s["classificationCode"], "xml:lang" => s["lang"] }.compact
|
|
165
185
|
|
|
166
186
|
xml.subject(s["subject"], attributes)
|
|
167
187
|
end
|
|
@@ -169,9 +189,16 @@ module Bolognese
|
|
|
169
189
|
end
|
|
170
190
|
|
|
171
191
|
def insert_version(xml)
|
|
172
|
-
return xml unless
|
|
192
|
+
return xml unless version_info.present?
|
|
173
193
|
|
|
174
|
-
xml.version(
|
|
194
|
+
xml.version(version_info)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def insert_language(xml)
|
|
199
|
+
return xml unless language.present?
|
|
200
|
+
|
|
201
|
+
xml.language(language)
|
|
175
202
|
end
|
|
176
203
|
|
|
177
204
|
def insert_related_identifiers(xml)
|
|
@@ -193,6 +220,93 @@ module Bolognese
|
|
|
193
220
|
end
|
|
194
221
|
end
|
|
195
222
|
|
|
223
|
+
def insert_related_items(xml)
|
|
224
|
+
return xml unless related_items.present?
|
|
225
|
+
|
|
226
|
+
xml.relatedItems do
|
|
227
|
+
related_items.each do |related_item|
|
|
228
|
+
attributes = {
|
|
229
|
+
'relatedItemType' => related_item["relatedItemType"],
|
|
230
|
+
'relationType' => related_item["relationType"],
|
|
231
|
+
}.compact
|
|
232
|
+
|
|
233
|
+
xml.relatedItem(related_item["relatedItem"], attributes) do
|
|
234
|
+
|
|
235
|
+
if related_item["relatedItemIdentifier"].present?
|
|
236
|
+
xml.relatedItemIdentifier(related_item["relatedItemIdentifier"]['relatedItemIdentifier'],
|
|
237
|
+
{
|
|
238
|
+
'relatedItemIdentifierType' => related_item["relatedItemIdentifier"]["relatedItemIdentifierType"],
|
|
239
|
+
'relatedMetadataScheme' => related_item["relatedItemIdentifier"]["relatedMetadataScheme"],
|
|
240
|
+
'schemeURI' => related_item["relatedItemIdentifier"]["schemeURI"],
|
|
241
|
+
'schemeType' => related_item["relatedItemIdentifier"]["schemeType"],
|
|
242
|
+
}.compact
|
|
243
|
+
)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
if related_item["creators"].present?
|
|
247
|
+
xml.creators do
|
|
248
|
+
Array.wrap(related_item['creators']).each do |au|
|
|
249
|
+
xml.creator do
|
|
250
|
+
insert_person(xml, au, "creator")
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
xml.titles do
|
|
257
|
+
Array.wrap(related_item['titles']).each do |title|
|
|
258
|
+
if title.is_a?(Hash)
|
|
259
|
+
t = title
|
|
260
|
+
else
|
|
261
|
+
t = {}
|
|
262
|
+
t["title"] = title
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
attributes = { 'titleType' => t["titleType"], 'xml:lang' => t["lang"] }.compact
|
|
266
|
+
xml.title(t["title"], attributes)
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
xml.publicationYear(related_item['publicationYear']) if related_item["publicationYear"].present?
|
|
271
|
+
xml.volume(related_item['volume']) if related_item["volume"].present?
|
|
272
|
+
xml.issue(related_item['issue']) if related_item["issue"].present?
|
|
273
|
+
xml.number(related_item['number'], {'numberType' => related_item['numberType']}.compact) if related_item["number"].present?
|
|
274
|
+
xml.firstPage(related_item['firstPage']) if related_item["firstPage"].present?
|
|
275
|
+
xml.lastPage(related_item['lastPage']) if related_item["lastPage"].present?
|
|
276
|
+
xml.publisher(related_item['publisher']) if related_item["publisher"].present?
|
|
277
|
+
xml.edition(related_item['edition']) if related_item["edition"].present?
|
|
278
|
+
|
|
279
|
+
if related_item["contributors"].present?
|
|
280
|
+
xml.contributors do
|
|
281
|
+
Array.wrap(related_item["contributors"]).each do |con|
|
|
282
|
+
xml.contributor("contributorType" => con["contributorType"] || "Other") do
|
|
283
|
+
insert_person(xml, con, "contributor")
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def insert_sizes(xml)
|
|
295
|
+
xml.sizes do
|
|
296
|
+
Array.wrap(sizes).each do |s|
|
|
297
|
+
xml.size(s)
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def insert_formats(xml)
|
|
303
|
+
xml.formats do
|
|
304
|
+
Array.wrap(formats).each do |f|
|
|
305
|
+
xml.format(f)
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
196
310
|
def insert_rights_list(xml)
|
|
197
311
|
return xml unless rights_list.present?
|
|
198
312
|
|
|
@@ -206,7 +320,13 @@ module Bolognese
|
|
|
206
320
|
r["rightsUri"] = normalize_id(rights)
|
|
207
321
|
end
|
|
208
322
|
|
|
209
|
-
attributes = {
|
|
323
|
+
attributes = {
|
|
324
|
+
"rightsURI" => r["rightsUri"],
|
|
325
|
+
"rightsIdentifier" => r["rightsIdentifier"],
|
|
326
|
+
"rightsIdentifierScheme" => r["rightsIdentifierScheme"],
|
|
327
|
+
"schemeURI" => r["schemeUri"],
|
|
328
|
+
"xml:lang" => r["lang"]
|
|
329
|
+
}.compact
|
|
210
330
|
|
|
211
331
|
xml.rights(r["rights"], attributes)
|
|
212
332
|
end
|
|
@@ -264,13 +384,19 @@ module Bolognese
|
|
|
264
384
|
xml.northBoundLatitude(geo_location.dig("geoLocationBox", "northBoundLatitude"))
|
|
265
385
|
end
|
|
266
386
|
end
|
|
267
|
-
|
|
268
387
|
if geo_location["geoLocationPolygon"]
|
|
269
388
|
xml.geoLocationPolygon do
|
|
270
|
-
geo_location["geoLocationPolygon"].each do |polygon_point|
|
|
271
|
-
|
|
272
|
-
xml.
|
|
273
|
-
|
|
389
|
+
Array.wrap(geo_location["geoLocationPolygon"]).each do |polygon_point|
|
|
390
|
+
if polygon_point.has_key?("polygonPoint")
|
|
391
|
+
xml.polygonPoint do
|
|
392
|
+
xml.pointLatitude(polygon_point.dig("polygonPoint", "pointLatitude"))
|
|
393
|
+
xml.pointLongitude(polygon_point.dig("polygonPoint", "pointLongitude"))
|
|
394
|
+
end
|
|
395
|
+
else
|
|
396
|
+
xml.inPolygonPoint do
|
|
397
|
+
xml.pointLatitude(polygon_point.dig("inPolygonPoint", "pointLatitude"))
|
|
398
|
+
xml.pointLongitude(polygon_point.dig("inPolygonPoint", "pointLongitude"))
|
|
399
|
+
end
|
|
274
400
|
end
|
|
275
401
|
end
|
|
276
402
|
end
|
data/lib/bolognese/doi_utils.rb
CHANGED
|
@@ -2,33 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
module Bolognese
|
|
4
4
|
module DoiUtils
|
|
5
|
+
class << self
|
|
6
|
+
include DoiUtils
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
def validate_doi(doi)
|
|
6
|
-
doi = Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(doi)).last
|
|
10
|
+
doi = Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.stage.datacite.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(doi)).last
|
|
7
11
|
# remove non-printing whitespace and downcase
|
|
8
12
|
doi.delete("\u200B").downcase if doi.present?
|
|
9
13
|
end
|
|
10
14
|
|
|
11
15
|
def validate_funder_doi(doi)
|
|
12
|
-
doi = Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.test.datacite.org)\/)?(doi:)?(10\.13039\/)?(
|
|
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
|
|
17
|
+
|
|
13
18
|
# remove non-printing whitespace and downcase
|
|
14
19
|
if doi.present?
|
|
15
|
-
doi.delete("\u200B").downcase
|
|
20
|
+
doi.delete("\u200B").downcase
|
|
16
21
|
"https://doi.org/10.13039/#{doi}"
|
|
17
22
|
end
|
|
18
23
|
end
|
|
19
24
|
|
|
20
25
|
def validate_prefix(doi)
|
|
21
|
-
Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}).*\z/.match(doi)).last
|
|
26
|
+
Array(/\A(?:(http|https):\/(\/)?(dx\.)?(doi.org|handle.stage.datacite.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}).*\z/.match(doi)).last
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
def doi_resolver(doi, options = {})
|
|
25
|
-
sandbox = Array(/handle.
|
|
26
|
-
sandbox.present? || options[:sandbox] ? "https://handle.
|
|
30
|
+
sandbox = Array(/handle.stage.datacite.org/.match(doi)).last
|
|
31
|
+
sandbox.present? || options[:sandbox] ? "https://handle.stage.datacite.org/" : "https://doi.org/"
|
|
27
32
|
end
|
|
28
33
|
|
|
29
34
|
def doi_api_url(doi, options = {})
|
|
30
|
-
sandbox = Array(/handle.
|
|
31
|
-
sandbox.present? || options[:sandbox] ? "https://api.
|
|
35
|
+
sandbox = Array(/handle.stage.datacite.org/.match(doi)).last
|
|
36
|
+
sandbox.present? || options[:sandbox] ? "https://api.stage.datacite.org/dois/#{doi_from_url(doi)}?include=media,client" : "https://api.datacite.org/dois/#{doi_from_url(doi)}?include=media,client"
|
|
32
37
|
end
|
|
33
38
|
|
|
34
39
|
def normalize_doi(doi, options = {})
|
|
@@ -40,7 +45,7 @@ module Bolognese
|
|
|
40
45
|
end
|
|
41
46
|
|
|
42
47
|
def doi_from_url(url)
|
|
43
|
-
if /\A(?:(http|https):\/\/(dx\.)?(doi.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(url)
|
|
48
|
+
if /\A(?:(http|https):\/\/(dx\.)?(doi.org|handle.stage.datacite.org|handle.test.datacite.org)\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(url)
|
|
44
49
|
uri = Addressable::URI.parse(url)
|
|
45
50
|
uri.path.gsub(/^\//, '').downcase
|
|
46
51
|
end
|
data/lib/bolognese/metadata.rb
CHANGED
|
@@ -6,21 +6,22 @@ module Bolognese
|
|
|
6
6
|
class Metadata
|
|
7
7
|
include Bolognese::MetadataUtils
|
|
8
8
|
|
|
9
|
-
attr_accessor :string, :from, :sandbox, :meta, :regenerate, :issue
|
|
9
|
+
attr_accessor :string, :from, :sandbox, :meta, :regenerate, :issue, :show_errors
|
|
10
10
|
attr_reader :doc, :page_start, :page_end
|
|
11
|
-
attr_writer :id, :provider_id, :client_id, :doi, :identifiers, :creators, :contributors, :titles, :publisher,
|
|
11
|
+
attr_writer :id, :provider_id, :client_id, :doi, :identifiers, :creators, :contributors, :titles, :publisher,
|
|
12
12
|
:rights_list, :dates, :publication_year, :volume, :url, :version_info,
|
|
13
13
|
:subjects, :contributor, :descriptions, :language, :sizes,
|
|
14
14
|
:formats, :schema_version, :meta, :container, :agency,
|
|
15
15
|
:format, :funding_references, :state, :geo_locations,
|
|
16
|
-
:types, :content_url, :related_identifiers, :style, :locale, :date_registered
|
|
16
|
+
:types, :content_url, :related_identifiers, :related_items, :style, :locale, :date_registered
|
|
17
17
|
|
|
18
|
-
def initialize(
|
|
19
|
-
|
|
18
|
+
def initialize(options={})
|
|
19
|
+
options.symbolize_keys!
|
|
20
|
+
id = normalize_id(options[:input], options)
|
|
20
21
|
ra = nil
|
|
21
22
|
|
|
22
23
|
if id.present?
|
|
23
|
-
@from = from || find_from_format(id: id)
|
|
24
|
+
@from = options[:from] || find_from_format(id: id)
|
|
24
25
|
|
|
25
26
|
# mEDRA, KISTI, JaLC and OP DOIs are found in the Crossref index
|
|
26
27
|
if @from == "medra"
|
|
@@ -36,10 +37,12 @@ module Bolognese
|
|
|
36
37
|
# generate name for method to call dynamically
|
|
37
38
|
hsh = @from.present? ? send("get_" + @from, id: id, sandbox: options[:sandbox]) : {}
|
|
38
39
|
string = hsh.fetch("string", nil)
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
elsif options[:input].present? && File.exist?(options[:input])
|
|
42
|
+
filename = File.basename(options[:input])
|
|
43
|
+
ext = File.extname(options[:input])
|
|
41
44
|
if %w(.bib .ris .xml .json).include?(ext)
|
|
42
|
-
hsh = {
|
|
45
|
+
hsh = {
|
|
43
46
|
"url" => options[:url],
|
|
44
47
|
"state" => options[:state],
|
|
45
48
|
"date_registered" => options[:date_registered],
|
|
@@ -47,14 +50,14 @@ module Bolognese
|
|
|
47
50
|
"provider_id" => options[:provider_id],
|
|
48
51
|
"client_id" => options[:client_id],
|
|
49
52
|
"content_url" => options[:content_url] }
|
|
50
|
-
string = IO.read(input)
|
|
51
|
-
@from = from || find_from_format(string: string, ext: ext)
|
|
53
|
+
string = IO.read(options[:input])
|
|
54
|
+
@from = options[:from] || find_from_format(string: string, filename: filename, ext: ext)
|
|
52
55
|
else
|
|
53
56
|
$stderr.puts "File type #{ext} not supported"
|
|
54
57
|
exit 1
|
|
55
58
|
end
|
|
56
59
|
else
|
|
57
|
-
hsh = {
|
|
60
|
+
hsh = {
|
|
58
61
|
"url" => options[:url],
|
|
59
62
|
"state" => options[:state],
|
|
60
63
|
"date_registered" => options[:date_registered],
|
|
@@ -67,8 +70,8 @@ module Bolognese
|
|
|
67
70
|
"titles" => options[:titles],
|
|
68
71
|
"publisher" => options[:publisher],
|
|
69
72
|
"publication_year" => options[:publication_year] }
|
|
70
|
-
string = input
|
|
71
|
-
@from = from || find_from_format(string: string)
|
|
73
|
+
string = options[:input]
|
|
74
|
+
@from = options[:from] || find_from_format(string: string)
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
# make sure input is encoded as utf8
|
|
@@ -109,14 +112,15 @@ module Bolognese
|
|
|
109
112
|
:language,
|
|
110
113
|
:geo_locations,
|
|
111
114
|
:related_identifiers,
|
|
115
|
+
:related_items,
|
|
112
116
|
:formats,
|
|
113
117
|
:sizes
|
|
114
118
|
).compact
|
|
115
119
|
|
|
116
120
|
@regenerate = options[:regenerate] || read_options.present?
|
|
117
|
-
|
|
118
121
|
# generate name for method to call dynamically
|
|
119
|
-
|
|
122
|
+
opts = { string: string, sandbox: options[:sandbox], doi: options[:doi], id: id, ra: ra }.merge(read_options)
|
|
123
|
+
@meta = @from.present? ? send("read_" + @from, **opts) : {}
|
|
120
124
|
end
|
|
121
125
|
|
|
122
126
|
def id
|
|
@@ -147,7 +151,7 @@ module Bolognese
|
|
|
147
151
|
def errors
|
|
148
152
|
meta.fetch("errors", nil) || datacite_errors(xml: datacite, schema_version: schema_version)
|
|
149
153
|
end
|
|
150
|
-
|
|
154
|
+
|
|
151
155
|
def descriptions
|
|
152
156
|
@descriptions ||= meta.fetch("descriptions", nil)
|
|
153
157
|
end
|
|
@@ -184,12 +188,16 @@ module Bolognese
|
|
|
184
188
|
@related_identifiers ||= meta.fetch("related_identifiers", nil)
|
|
185
189
|
end
|
|
186
190
|
|
|
191
|
+
def related_items
|
|
192
|
+
@related_items ||= meta.fetch("related_items", nil)
|
|
193
|
+
end
|
|
194
|
+
|
|
187
195
|
def url
|
|
188
196
|
@url ||= meta.fetch("url", nil)
|
|
189
197
|
end
|
|
190
198
|
|
|
191
199
|
def version_info
|
|
192
|
-
@version_info ||= meta.fetch("version_info", nil)
|
|
200
|
+
@version_info ||= meta.fetch("version_info", nil) || meta.fetch("version", nil)
|
|
193
201
|
end
|
|
194
202
|
|
|
195
203
|
def publication_year
|
|
@@ -209,7 +217,7 @@ module Bolognese
|
|
|
209
217
|
end
|
|
210
218
|
|
|
211
219
|
def publisher
|
|
212
|
-
@publisher ||= meta.fetch("publisher", nil)
|
|
220
|
+
@publisher ||= normalize_publisher(meta["publisher"]) if meta.fetch("publisher", nil).present?
|
|
213
221
|
end
|
|
214
222
|
|
|
215
223
|
def identifiers
|
|
@@ -12,6 +12,7 @@ require_relative 'readers/crosscite_reader'
|
|
|
12
12
|
require_relative 'readers/crossref_reader'
|
|
13
13
|
require_relative 'readers/datacite_json_reader'
|
|
14
14
|
require_relative 'readers/datacite_reader'
|
|
15
|
+
require_relative 'readers/npm_reader'
|
|
15
16
|
require_relative 'readers/ris_reader'
|
|
16
17
|
require_relative 'readers/schema_org_reader'
|
|
17
18
|
|
|
@@ -45,6 +46,7 @@ module Bolognese
|
|
|
45
46
|
include Bolognese::Readers::CrossrefReader
|
|
46
47
|
include Bolognese::Readers::DataciteReader
|
|
47
48
|
include Bolognese::Readers::DataciteJsonReader
|
|
49
|
+
include Bolognese::Readers::NpmReader
|
|
48
50
|
include Bolognese::Readers::RisReader
|
|
49
51
|
include Bolognese::Readers::SchemaOrgReader
|
|
50
52
|
|
|
@@ -94,7 +96,7 @@ module Bolognese
|
|
|
94
96
|
if container.present?
|
|
95
97
|
container["title"]
|
|
96
98
|
elsif types["citeproc"] == "article-journal"
|
|
97
|
-
publisher
|
|
99
|
+
publisher["name"] if publisher.present?
|
|
98
100
|
else
|
|
99
101
|
nil
|
|
100
102
|
end
|
|
@@ -106,12 +108,12 @@ module Bolognese
|
|
|
106
108
|
end
|
|
107
109
|
|
|
108
110
|
def reverse
|
|
109
|
-
{ "citation" => Array.wrap(related_identifiers).select { |ri| ri["relationType"] == "IsReferencedBy" }.map do |r|
|
|
111
|
+
{ "citation" => Array.wrap(related_identifiers).select { |ri| ri["relationType"] == "IsReferencedBy" }.map do |r|
|
|
110
112
|
{ "@id" => normalize_doi(r["relatedIdentifier"]),
|
|
111
113
|
"@type" => r["resourceTypeGeneral"] || "ScholarlyArticle",
|
|
112
114
|
"identifier" => r["relatedIdentifierType"] == "DOI" ? nil : to_identifier(r) }.compact
|
|
113
115
|
end.unwrap,
|
|
114
|
-
"isBasedOn" => Array.wrap(related_identifiers).select { |ri| ri["relationType"] == "IsSupplementTo" }.map do |r|
|
|
116
|
+
"isBasedOn" => Array.wrap(related_identifiers).select { |ri| ri["relationType"] == "IsSupplementTo" }.map do |r|
|
|
115
117
|
{ "@id" => normalize_doi(r["relatedIdentifier"]),
|
|
116
118
|
"@type" => r["resourceTypeGeneral"] || "ScholarlyArticle",
|
|
117
119
|
"identifier" => r["relatedIdentifierType"] == "DOI" ? nil : to_identifier(r) }.compact
|
|
@@ -119,7 +121,15 @@ module Bolognese
|
|
|
119
121
|
end
|
|
120
122
|
|
|
121
123
|
def graph
|
|
124
|
+
# preload schema_org context
|
|
125
|
+
JSON::LD::Context.add_preloaded(
|
|
126
|
+
'http://schema.org/',
|
|
127
|
+
JSON::LD::Context.new.parse('resources/schema_org/jsonldcontext.json')
|
|
128
|
+
)
|
|
129
|
+
|
|
122
130
|
RDF::Graph.new << JSON::LD::API.toRdf(schema_hsh)
|
|
131
|
+
rescue NameError
|
|
132
|
+
nil
|
|
123
133
|
end
|
|
124
134
|
|
|
125
135
|
def citeproc_hsh
|
|
@@ -130,14 +140,21 @@ module Bolognese
|
|
|
130
140
|
author = to_citeproc(creators)
|
|
131
141
|
end
|
|
132
142
|
|
|
143
|
+
if types["resourceTypeGeneral"] == "Software" && version_info.present?
|
|
144
|
+
type = "book"
|
|
145
|
+
else
|
|
146
|
+
type = types["citeproc"]
|
|
147
|
+
end
|
|
148
|
+
|
|
133
149
|
{
|
|
134
|
-
"type" =>
|
|
150
|
+
"type" => type,
|
|
135
151
|
"id" => normalize_doi(doi),
|
|
136
152
|
"categories" => Array.wrap(subjects).map { |k| parse_attributes(k, content: "subject", first: true) }.presence,
|
|
137
153
|
"language" => language,
|
|
138
154
|
"author" => author,
|
|
139
155
|
"contributor" => to_citeproc(contributors),
|
|
140
|
-
"
|
|
156
|
+
"translator" => contributors ? to_citeproc(contributors.select { |c| c["contributorType"] == "Translator" }) : nil,
|
|
157
|
+
"issued" => get_date(dates, "Issued") ? get_date_parts(get_date(dates, "Issued")) : get_date_parts(publication_year.to_s),
|
|
141
158
|
"submitted" => Array.wrap(dates).find { |d| d["dateType"] == "Submitted" }.to_h.fetch("__content__", nil),
|
|
142
159
|
"abstract" => parse_attributes(descriptions, content: "description", first: true),
|
|
143
160
|
"container-title" => container_title,
|
|
@@ -145,9 +162,10 @@ module Bolognese
|
|
|
145
162
|
"volume" => container.to_h["volume"],
|
|
146
163
|
"issue" => container.to_h["issue"],
|
|
147
164
|
"page" => page,
|
|
148
|
-
"publisher" => publisher,
|
|
165
|
+
"publisher" => publisher["name"],
|
|
149
166
|
"title" => parse_attributes(titles, content: "title", first: true),
|
|
150
167
|
"URL" => url,
|
|
168
|
+
"copyright" => Array.wrap(rights_list).map { |l| l["rights"] }.first,
|
|
151
169
|
"version" => version_info
|
|
152
170
|
}.compact.symbolize_keys
|
|
153
171
|
end
|
|
@@ -176,6 +194,7 @@ module Bolognese
|
|
|
176
194
|
"geo_locations" => geo_locations,
|
|
177
195
|
"funding_references" => funding_references,
|
|
178
196
|
"related_identifiers" => related_identifiers,
|
|
197
|
+
"related_items" => related_items,
|
|
179
198
|
"schema_version" => schema_version,
|
|
180
199
|
"provider_id" => provider_id,
|
|
181
200
|
"client_id" => client_id,
|
|
@@ -31,12 +31,13 @@ module Bolognese
|
|
|
31
31
|
|
|
32
32
|
meta = string.present? ? BibTeX.parse(string).first : OpenStruct.new
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
bibtex_type = meta.try(:type).to_s
|
|
35
|
+
schema_org = BIB_TO_SO_TRANSLATIONS[bibtex_type] || "ScholarlyArticle"
|
|
35
36
|
types = {
|
|
36
|
-
"resourceTypeGeneral" => Metadata::
|
|
37
|
+
"resourceTypeGeneral" => Metadata::BIB_TO_DC_TRANSLATIONS[bibtex_type],
|
|
37
38
|
"resourceType" => Bolognese::Utils::BIB_TO_CR_TRANSLATIONS[meta.try(:type).to_s] || meta.try(:type).to_s,
|
|
38
39
|
"schemaOrg" => schema_org,
|
|
39
|
-
"bibtex" =>
|
|
40
|
+
"bibtex" => bibtex_type,
|
|
40
41
|
"citeproc" => BIB_TO_CP_TRANSLATIONS[meta.try(:type).to_s] || "misc",
|
|
41
42
|
"ris" => BIB_TO_RIS_TRANSLATIONS[meta.try(:type).to_s] || "GEN"
|
|
42
43
|
}.compact
|
|
@@ -50,53 +51,47 @@ module Bolognese
|
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
related_identifiers = if meta.try(:journal).present? && meta.try(:issn).to_s.presence
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
nil
|
|
60
|
-
end
|
|
54
|
+
[{ "type" => "Periodical",
|
|
55
|
+
"relationType" => "IsPartOf",
|
|
56
|
+
"relatedIdentifierType" => "ISSN",
|
|
57
|
+
"title" => meta.journal.to_s,
|
|
58
|
+
"relatedIdentifier" => meta.try(:issn).to_s.presence }.compact]
|
|
59
|
+
end
|
|
61
60
|
|
|
62
61
|
container = if meta.try(:journal).present?
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
nil
|
|
75
|
-
end
|
|
62
|
+
first_page = meta.try(:pages).present? ? meta.try(:pages).split("-").map(&:strip)[0] : nil
|
|
63
|
+
last_page = meta.try(:pages).present? ? meta.try(:pages).split("-").map(&:strip)[1] : nil
|
|
64
|
+
|
|
65
|
+
{ "type" => "Journal",
|
|
66
|
+
"title" => meta.journal.to_s,
|
|
67
|
+
"identifier" => meta.try(:issn).to_s.presence,
|
|
68
|
+
"identifierType" => meta.try(:issn).present? ? "ISSN" : nil,
|
|
69
|
+
"volume" => meta.try(:volume).to_s.presence,
|
|
70
|
+
"firstPage" => first_page,
|
|
71
|
+
"lastPage" => last_page }.compact
|
|
72
|
+
end
|
|
76
73
|
|
|
77
74
|
state = meta.try(:doi).to_s.present? || read_options.present? ? "findable" : "not_found"
|
|
78
|
-
dates = if meta.try(:date).present?
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
nil
|
|
83
|
-
end
|
|
75
|
+
dates = if meta.try(:date).present? && Date.edtf(meta.date.to_s).present?
|
|
76
|
+
[{ "date" => meta.date.to_s,
|
|
77
|
+
"dateType" => "Issued" }]
|
|
78
|
+
end
|
|
84
79
|
publication_year = meta.try(:date).present? ? meta.date.to_s[0..3] : nil
|
|
80
|
+
rights_list = meta.try(:copyright).present? ? [hsh_to_spdx("rightsURI" => meta[:copyright])] : []
|
|
85
81
|
|
|
86
82
|
{ "id" => normalize_doi(doi),
|
|
87
83
|
"types" => types,
|
|
88
|
-
"identifiers" => [{ "identifier" => normalize_doi(doi), "identifierType" => "DOI" }],
|
|
89
84
|
"doi" => doi,
|
|
90
85
|
"url" => meta.try(:url).to_s.presence,
|
|
91
86
|
"titles" => meta.try(:title).present? ? [{ "title" => meta.try(:title).to_s }] : [],
|
|
92
87
|
"creators" => creators,
|
|
93
88
|
"container" => container,
|
|
94
|
-
"publisher" => meta.try(:publisher).to_s
|
|
89
|
+
"publisher" => meta.try(:publisher).present? ? { "name" => meta.publisher.to_s } : nil,
|
|
95
90
|
"related_identifiers" => related_identifiers,
|
|
96
91
|
"dates" => dates,
|
|
97
92
|
"publication_year" => publication_year,
|
|
98
|
-
"descriptions" => meta.try(:abstract).present? ? [{ "description" => meta.try(:abstract) && sanitize(meta.abstract.to_s).presence, "descriptionType" => "Abstract" }] : [],
|
|
99
|
-
"rights_list" =>
|
|
93
|
+
"descriptions" => meta.try(:abstract).present? ? [{ "description" => meta.try(:abstract) && sanitize(meta.abstract.to_s, new_line: true).presence, "descriptionType" => "Abstract" }] : [],
|
|
94
|
+
"rights_list" => rights_list,
|
|
100
95
|
"state" => state
|
|
101
96
|
}.merge(read_options)
|
|
102
97
|
end
|