Class: Briard::Metadata

Inherits:
Object
  • Object
show all
Includes:
MetadataUtils
Defined in:
lib/briard/metadata.rb

Constant Summary

Constants included from Readers::SchemaOrgReader

Readers::SchemaOrgReader::SO_TO_DC_RELATION_TYPES, Readers::SchemaOrgReader::SO_TO_DC_REVERSE_RELATION_TYPES

Constants included from Readers::RisReader

Readers::RisReader::RIS_TO_BIB_TRANSLATIONS, Readers::RisReader::RIS_TO_CP_TRANSLATIONS, Readers::RisReader::RIS_TO_SO_TRANSLATIONS

Constants included from Readers::CiteprocReader

Readers::CiteprocReader::CP_TO_RIS_TRANSLATIONS, Readers::CiteprocReader::CP_TO_SO_TRANSLATIONS

Constants included from Readers::BibtexReader

Readers::BibtexReader::BIB_TO_CP_TRANSLATIONS, Readers::BibtexReader::BIB_TO_RIS_TRANSLATIONS, Readers::BibtexReader::BIB_TO_SO_TRANSLATIONS

Constants included from Utils

Utils::BIB_TO_CR_TRANSLATIONS, Utils::BIB_TO_DC_TRANSLATIONS, Utils::CP_TO_DC_TRANSLATIONS, Utils::CR_TO_BIB_TRANSLATIONS, Utils::CR_TO_CP_TRANSLATIONS, Utils::CR_TO_DC_TRANSLATIONS, Utils::CR_TO_JATS_TRANSLATIONS, Utils::CR_TO_RIS_TRANSLATIONS, Utils::CR_TO_SO_TRANSLATIONS, Utils::DC_TO_CP_TRANSLATIONS, Utils::DC_TO_RIS_TRANSLATIONS, Utils::DC_TO_SO_TRANSLATIONS, Utils::NORMALIZED_LICENSES, Utils::RIS_TO_DC_TRANSLATIONS, Utils::SO_TO_BIB_TRANSLATIONS, Utils::SO_TO_CP_TRANSLATIONS, Utils::SO_TO_DC_TRANSLATIONS, Utils::SO_TO_JATS_TRANSLATIONS, Utils::SO_TO_RIS_TRANSLATIONS, Utils::UNKNOWN_INFORMATION

Constants included from SchemaUtils

SchemaUtils::JSON_SCHEMA

Constants included from AuthorUtils

AuthorUtils::IDENTIFIER_SCHEME_URIS

Instance Attribute Summary collapse

Attributes included from MetadataUtils

#name_detector, #reverse

Instance Method Summary collapse

Methods included from MetadataUtils

#citeproc_hsh, #container_title, #crosscite_hsh, #graph, #locale, #raw, #should_passthru, #style

Methods included from Writers::TurtleWriter

#turtle

Methods included from Writers::SchemaOrgWriter

#schema_hsh, #schema_org

Methods included from Writers::RisWriter

#ris

Methods included from Writers::RdfXmlWriter

#rdf_xml

Methods included from Writers::JatsWriter

#date, #insert_authors, #insert_citation, #insert_citation_title, #insert_contributor, #insert_editors, #insert_fpage, #insert_issue, #insert_lpage, #insert_pub_id, #insert_publication_date, #insert_publisher_name, #insert_source, #insert_version, #insert_volume, #is_article?, #is_chapter?, #is_data?, #jats, #publication_type

Methods included from Writers::DataciteJsonWriter

#datacite_json

Methods included from Writers::DataciteWriter

#datacite

Methods included from Writers::CsvWriter

#csv

Methods included from Writers::CrossrefWriter

#crossref

Methods included from Writers::CrossciteWriter

#crosscite

Methods included from Writers::CodemetaWriter

#codemeta

Methods included from Writers::CffWriter

#cff, #write_cff_creators, #write_references

Methods included from Writers::CiteprocWriter

#citeproc

Methods included from Writers::CitationWriter

#citation

Methods included from Writers::BibtexWriter

#bibtex

Methods included from Readers::SchemaOrgReader

#get_schema_org, #read_schema_org, #schema_org_has_part, #schema_org_is_identical_to, #schema_org_is_new_version_of, #schema_org_is_part_of, #schema_org_is_previous_version_of, #schema_org_is_referenced_by, #schema_org_is_supplement_to, #schema_org_is_supplemented_by, #schema_org_references, #schema_org_related_identifier, #schema_org_reverse_related_identifier

Methods included from Readers::RisReader

#read_ris, #ris_meta

Methods included from Readers::NpmReader

#get_npm, #read_npm

Methods included from Readers::DataciteJsonReader

#read_datacite_json

Methods included from Readers::DataciteReader

#get_datacite, #get_titles, #read_datacite, #set_container

Methods included from Readers::CrossrefReader

#crossref_alternate_identifiers, #crossref_date_published, #crossref_description, #crossref_funding_reference, #crossref_is_part_of, #crossref_license, #crossref_people, #crossref_references, #get_crossref, #read_crossref

Methods included from Readers::CrossrefJsonReader

#get_crossref_json, #read_crossref_json

Methods included from Readers::CrossciteReader

#read_crosscite

Methods included from Readers::CodemetaReader

#get_codemeta, #read_codemeta

Methods included from Readers::CffReader

#cff_creators, #cff_references, #get_cff, #read_cff

Methods included from Readers::CiteprocReader

#read_citeproc

Methods included from Readers::BibtexReader

#read_bibtex

Methods included from Utils

#decode_doi, #encode_doi, #find_from_format, #find_from_format_by_ext, #find_from_format_by_filename, #find_from_format_by_id, #find_from_format_by_string, #from_citeproc, #from_datacite_json, #from_schema_org, #from_schema_org_contributors, #from_schema_org_creators, #get_contributor, #get_date, #get_date_from_date_parts, #get_date_from_parts, #get_date_parts, #get_date_parts_from_parts, #get_datetime_from_iso8601, #get_datetime_from_time, #get_identifier, #get_identifier_type, #get_iso8601_date, #get_series_information, #get_year_month, #get_year_month_day, #github_as_cff_url, #github_as_codemeta_url, #github_as_owner_url, #github_as_release_url, #github_as_repo_url, #github_from_url, #github_owner_from_url, #github_release_from_url, #github_repo_from_url, #hsh_to_fos, #hsh_to_spdx, #jsonlint, #map_hash_keys, #name_to_fos, #name_to_spdx, #normalize_cc_url, #normalize_id, #normalize_ids, #normalize_issn, #normalize_licenses, #normalize_orcid, #normalize_url, #orcid_as_url, #orcid_from_url, #parse_attributes, #sanitize, #strip_milliseconds, #to_citeproc, #to_datacite_json, #to_identifier, #to_ris, #to_schema_org, #to_schema_org_container, #to_schema_org_contributors, #to_schema_org_creators, #to_schema_org_funder, #to_schema_org_identifiers, #to_schema_org_relation, #to_schema_org_spatial_coverage, #validate_orcid, #validate_orcid_scheme, #validate_url

Methods included from SchemaUtils

#json_schema_errors

Methods included from DataciteUtils

#datacite_errors, #datacite_xml, #insert_alternate_identifiers, #insert_contributors, #insert_creators, #insert_dates, #insert_descriptions, #insert_formats, #insert_funding_references, #insert_geo_locations, #insert_identifier, #insert_language, #insert_person, #insert_publication_year, #insert_publisher, #insert_related_identifiers, #insert_related_items, #insert_resource_type, #insert_rights_list, #insert_sizes, #insert_subjects, #insert_titles, #insert_version, #insert_work, #root_attributes

Methods included from CrossrefUtils

#crossref_errors, #crossref_root_attributes, #crossref_xml, #insert_citation_list, #insert_crossref_abstract, #insert_crossref_access_indicators, #insert_crossref_alternate_identifiers, #insert_crossref_creators, #insert_crossref_issn, #insert_crossref_language, #insert_crossref_person, #insert_crossref_publication_date, #insert_crossref_rights_list, #insert_crossref_subjects, #insert_crossref_titles, #insert_crossref_work, #insert_doi_data, #insert_group_title, #insert_institution, #insert_journal, #insert_posted_content, #insert_posted_date

Methods included from AuthorUtils

#authors_as_string, #cleanup_author, #get_affiliations, #get_authors, #get_one_author, #is_personal_name?, #name_exists?

Methods included from DoiUtils

#crossref_api_url, #datacite_api_url, #doi_as_url, #doi_from_url, #doi_resolver, #get_doi_ra, #normalize_doi, #validate_doi, #validate_funder_doi, #validate_prefix

Constructor Details

#initialize(options = {}) ⇒ Metadata

Returns a new instance of Metadata.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/briard/metadata.rb', line 15

def initialize(options = {})
  options.symbolize_keys!

  id = normalize_id(options[:input], options)
  ra = nil

  if id.present?
    @from = options[:from] || find_from_format(id: id)

    # mEDRA, KISTI, JaLC and OP DOIs are found in the Crossref index
    case @from
    when 'medra'
      ra = 'mEDRA'
    when 'kisti'
      ra = 'KISTI'
    when 'jalc'
      ra = 'JaLC'
    when 'op'
      ra = 'OP'
    end

    # generate name for method to call dynamically
    hsh = @from.present? ? send("get_#{@from}", id: id, **options) : {}
    string = hsh.fetch('string', nil)

  elsif options[:input].present? && File.exist?(options[:input])
    filename = File.basename(options[:input])
    ext = File.extname(options[:input])
    if %w[.bib .ris .xml .json .cff].include?(ext)
      hsh = {
        'url' => options[:url],
        'state' => options[:state],
        'date_registered' => options[:date_registered],
        'date_updated' => options[:date_updated],
        'provider_id' => options[:provider_id],
        'client_id' => options[:client_id],
        'depositor' => options[:depositor],
        'email' => options[:email],
        'registrant' => options[:registrant],
        'content_url' => options[:content_url]
      }
      string = File.read(options[:input])
      @from = options[:from] || find_from_format(string: string, ext: ext)
    else
      warn "File type #{ext} not supported"
      exit 1
    end
  else
    hsh = {
      'url' => options[:url],
      'state' => options[:state],
      'date_registered' => options[:date_registered],
      'date_updated' => options[:date_updated],
      'provider_id' => options[:provider_id],
      'client_id' => options[:client_id],
      'depositor' => options[:depositor],
      'email' => options[:email],
      'registrant' => options[:registrant],
      'content_url' => options[:content_url],
      'creators' => options[:creators],
      'contributors' => options[:contributors],
      'titles' => options[:titles],
      'publisher' => options[:publisher],
      'publication_year' => options[:publication_year]
    }
    string = options[:input]
    @from = options[:from] || find_from_format(string: string)
  end

  # make sure input is encoded as utf8
  if string.present? && string.is_a?(String)
    dup_string = string.dup.force_encoding('UTF-8').encode!
  end
  @string = dup_string

  # input options for citation formatting
  @style = options[:style]
  @locale = options[:locale]

  @sandbox = options[:sandbox]

  # options that come from the datacite database
  @url = hsh.to_h['url'].presence || options[:url].presence
  @state = hsh.to_h['state'].presence
  @date_registered = hsh.to_h['date_registered'].presence
  @date_updated = hsh.to_h['date_updated'].presence
  @provider_id = hsh.to_h['provider_id'].presence
  @client_id = hsh.to_h['client_id'].presence
  @content_url = hsh.to_h['content_url'].presence

  # options that come from the submission, needed
  # for crossref doi registration
  @depositor = hsh.to_h['depositor'].presence
  @email = hsh.to_h['email'].presence
  @registrant = hsh.to_h['registrant'].presence

  # set attributes directly
  read_options = options.slice(
    :creators,
    :contributors,
    :titles,
    :types,
    :identifiers,
    :container,
    :publisher,
    :funding_references,
    :dates,
    :publication_year,
    :descriptions,
    :rights_list,
    :version_info,
    :subjects,
    :language,
    :geo_locations,
    :related_identifiers,
    :related_items,
    :formats,
    :sizes
  ).compact

  @regenerate = options[:regenerate] || read_options.present?
  # generate name for method to call dynamically
  opts = { string: string, sandbox: options[:sandbox], doi: options[:doi], id: id,
           ra: ra }.merge(read_options)
  @meta = @from.present? ? send("read_#{@from}", **opts) : {}
end

Instance Attribute Details

#agencyObject



249
250
251
# File 'lib/briard/metadata.rb', line 249

def agency
  @agency ||= meta.fetch('agency', nil)
end

#client_idObject



154
155
156
# File 'lib/briard/metadata.rb', line 154

def client_id
  @client_id ||= meta.fetch('client_id', nil)
end

#containerObject



225
226
227
# File 'lib/briard/metadata.rb', line 225

def container
  @container ||= meta.fetch('container', nil)
end

#content_urlObject



245
246
247
# File 'lib/briard/metadata.rb', line 245

def content_url
  @content_url ||= meta.fetch('content_url', nil)
end

#contributor=(value) ⇒ Object (writeonly)

Sets the attribute contributor

Parameters:

  • value

    the value to set the attribute contributor to.



12
13
14
# File 'lib/briard/metadata.rb', line 12

def contributor=(value)
  @contributor = value
end

#contributorsObject



273
274
275
# File 'lib/briard/metadata.rb', line 273

def contributors
  @contributors ||= meta.fetch('contributors', nil)
end

#creatorsObject



269
270
271
# File 'lib/briard/metadata.rb', line 269

def creators
  @creators ||= meta.fetch('creators', nil)
end

#date_registeredObject



257
258
259
# File 'lib/briard/metadata.rb', line 257

def date_registered
  @date_registered ||= meta.fetch('date_registered', nil)
end

#datesObject



233
234
235
# File 'lib/briard/metadata.rb', line 233

def dates
  @dates ||= meta.fetch('dates', nil)
end

#depositorObject

Returns the value of attribute depositor.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def depositor
  @depositor
end

#descriptionsObject



173
174
175
# File 'lib/briard/metadata.rb', line 173

def descriptions
  @descriptions ||= meta.fetch('descriptions', nil)
end

#docObject (readonly)

Returns the value of attribute doc.



11
12
13
# File 'lib/briard/metadata.rb', line 11

def doc
  @doc
end

#doiObject



146
147
148
# File 'lib/briard/metadata.rb', line 146

def doi
  @doi ||= meta.fetch('doi', nil)
end

#emailObject

Returns the value of attribute email.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def email
  @email
end

#format=(value) ⇒ Object (writeonly)

Sets the attribute format

Parameters:

  • value

    the value to set the attribute format to.



12
13
14
# File 'lib/briard/metadata.rb', line 12

def format=(value)
  @format = value
end

#formatsObject



193
194
195
# File 'lib/briard/metadata.rb', line 193

def formats
  @formats ||= meta.fetch('formats', nil)
end

#fromObject

Returns the value of attribute from.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def from
  @from
end

#funding_referencesObject



201
202
203
# File 'lib/briard/metadata.rb', line 201

def funding_references
  @funding_references ||= meta.fetch('funding_references', nil)
end

#geo_locationsObject



229
230
231
# File 'lib/briard/metadata.rb', line 229

def geo_locations
  @geo_locations ||= meta.fetch('geo_locations', nil)
end

#idObject



142
143
144
# File 'lib/briard/metadata.rb', line 142

def id
  @id ||= meta.fetch('id', nil)
end

#identifiersObject



241
242
243
# File 'lib/briard/metadata.rb', line 241

def identifiers
  @identifiers ||= meta.fetch('identifiers', nil)
end

#issueObject

Returns the value of attribute issue.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def issue
  @issue
end

#languageObject



185
186
187
# File 'lib/briard/metadata.rb', line 185

def language
  @language ||= meta.fetch('language', nil)
end

#locale=(value) ⇒ Object (writeonly)

Sets the attribute locale

Parameters:

  • value

    the value to set the attribute locale to.



12
13
14
# File 'lib/briard/metadata.rb', line 12

def locale=(value)
  @locale = value
end

#metaObject

Returns the value of attribute meta.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def meta
  @meta
end

#page_endObject (readonly)

Returns the value of attribute page_end.



11
12
13
# File 'lib/briard/metadata.rb', line 11

def page_end
  @page_end
end

#page_startObject (readonly)

Returns the value of attribute page_start.



11
12
13
# File 'lib/briard/metadata.rb', line 11

def page_start
  @page_start
end

#provider_idObject



150
151
152
# File 'lib/briard/metadata.rb', line 150

def provider_id
  @provider_id ||= meta.fetch('provider_id', nil)
end

#publication_yearObject



221
222
223
# File 'lib/briard/metadata.rb', line 221

def publication_year
  @publication_year ||= meta.fetch('publication_year', nil)
end

#publisherObject



237
238
239
# File 'lib/briard/metadata.rb', line 237

def publisher
  @publisher ||= meta.fetch('publisher', nil)
end

#regenerateObject

Returns the value of attribute regenerate.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def regenerate
  @regenerate
end

#registrantObject

Returns the value of attribute registrant.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def registrant
  @registrant
end


205
206
207
# File 'lib/briard/metadata.rb', line 205

def related_identifiers
  @related_identifiers ||= meta.fetch('related_identifiers', nil)
end


209
210
211
# File 'lib/briard/metadata.rb', line 209

def related_items
  @related_items ||= meta.fetch('related_items', nil)
end

#rights_listObject



177
178
179
# File 'lib/briard/metadata.rb', line 177

def rights_list
  @rights_list ||= meta.fetch('rights_list', nil)
end

#sandboxObject

Returns the value of attribute sandbox.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def sandbox
  @sandbox
end

#schema_versionObject



197
198
199
# File 'lib/briard/metadata.rb', line 197

def schema_version
  @schema_version ||= meta.fetch('schema_version', nil)
end

#show_errorsObject

Returns the value of attribute show_errors.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def show_errors
  @show_errors
end

#sizesObject



189
190
191
# File 'lib/briard/metadata.rb', line 189

def sizes
  @sizes ||= meta.fetch('sizes', nil)
end

#stateObject



253
254
255
# File 'lib/briard/metadata.rb', line 253

def state
  @state ||= meta.fetch('state', nil)
end

#stringObject

Returns the value of attribute string.



9
10
11
# File 'lib/briard/metadata.rb', line 9

def string
  @string
end

#style=(value) ⇒ Object (writeonly)

Sets the attribute style

Parameters:

  • value

    the value to set the attribute style to.



12
13
14
# File 'lib/briard/metadata.rb', line 12

def style=(value)
  @style = value
end

#subjectsObject



181
182
183
# File 'lib/briard/metadata.rb', line 181

def subjects
  @subjects ||= meta.fetch('subjects', nil)
end

#titlesObject



265
266
267
# File 'lib/briard/metadata.rb', line 265

def titles
  @titles ||= meta.fetch('titles', nil)
end

#typesObject



261
262
263
# File 'lib/briard/metadata.rb', line 261

def types
  @types ||= meta.fetch('types', nil)
end

#urlObject



213
214
215
# File 'lib/briard/metadata.rb', line 213

def url
  @url ||= meta.fetch('url', nil)
end

#version_infoObject



217
218
219
# File 'lib/briard/metadata.rb', line 217

def version_info
  @version_info ||= meta.fetch('version_info', nil) || meta.fetch('version', nil)
end

#volume=(value) ⇒ Object (writeonly)

Sets the attribute volume

Parameters:

  • value

    the value to set the attribute volume to.



12
13
14
# File 'lib/briard/metadata.rb', line 12

def volume=(value)
  @volume = value
end

Instance Method Details

#errorsObject

Catch errors in the reader Then validate against JSON schema for internal metadata format Then validate against DataCite schema, unless already errors in the reader



169
170
171
# File 'lib/briard/metadata.rb', line 169

def errors
  meta.fetch('errors', nil) || json_schema_errors || datacite_errors(xml: datacite, schema_version: schema_version)
end

#exists?Boolean

Returns:

  • (Boolean)


158
159
160
# File 'lib/briard/metadata.rb', line 158

def exists?
  (@state || meta.fetch('state', nil)) != 'not_found'
end

#valid?Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/briard/metadata.rb', line 162

def valid?
  exists? && errors.nil?
end