Class: Datacite::Mapping::Resource

Inherits:
Object
  • Object
show all
Includes:
XML::Mapping
Defined in:
lib/datacite/mapping/resource.rb

Overview

A collection of metadata properties chosen for the accurate and consistent identification of a resource for citation and retrieval purposes, along with recommended use instructions. The resource that is being identified can be of any kind, but it is typically a dataset.

Constant Summary collapse

NAMESPACE =
XML::MappingExtensions::Namespace.new(
  uri: 'http://datacite.org/schema/kernel-3',
  schema_location: 'http://datacite.org/schema/kernel-3 http://schema.datacite.org/meta/kernel-3/metadata.xsd'
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(identifier:, creators:, titles:, publisher:, publication_year:, subjects: [], contributors: [], dates: [], language: 'en', resource_type: nil, alternate_identifiers: [], related_identifiers: [], sizes: [], formats: [], version: nil, rights_list: [], descriptions: [], geo_locations: []) ⇒ Resource

Initialies a new Datacite::Mapping::Resource

Parameters:

  • identifier (Identifier)

    a persistent identifier that identifies a resource.

  • creators (Array<Creator>)

    the main researchers involved working on the data, or the authors of the publication in priority order.

  • titles (Array<Title>)

    the names or titles by which a resource is known.

  • publisher (String)

    the name of the entity that holds, archives, publishes prints, distributes, releases, issues, or produces the resource.

  • publication_year (Integer)

    year when the resource is made publicly available.

  • subjects (Array<Subject>) (defaults to: [])

    subjects, keywords, classification codes, or key phrases describing the resource.

  • contributors (Array<Contributor>) (defaults to: [])

    institutions or persons responsible for collecting, creating, or otherwise contributing to the developement of the dataset.

  • dates (Array<Date>) (defaults to: [])

    different dates relevant to the work.

  • language (String) (defaults to: 'en')

    Primary language of the resource: an IETF BCP 47, ISO 639-1 language code. It's unclear from the spec whether language is required; to play it safe, if it's missing, we default to 'en'.

  • resource_type (ResourceType, nil) (defaults to: nil)

    the type of the resource

  • alternate_identifiers (Array<AlternateIdentifier>) (defaults to: [])

    an identifier or identifiers other than the primary Identifier applied to the resource being registered.

  • related_identifiers (Array<RelatedIdentifier>) (defaults to: [])

    identifiers of related resources.

  • sizes (Array<String>) (defaults to: [])

    unstructured size information about the resource.

  • formats (Array<String>) (defaults to: [])

    technical format of the resource, e.g. file extension or MIME type.

  • version (String) (defaults to: nil)

    version number of the resource.

  • rights_list (Array<Rights>) (defaults to: [])

    rights information for this resource.

  • descriptions (Array<Description>) (defaults to: [])

    all additional information that does not fit in any of the other categories.

  • geo_locations (Array<GeoLocations>) (defaults to: [])

    spatial region or named place where the data was gathered or about which the data is focused.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/datacite/mapping/resource.rb', line 46

def initialize(identifier:, creators:, titles:, publisher:, publication_year:, subjects: [], contributors: [], dates: [], language: 'en', resource_type: nil, alternate_identifiers: [], related_identifiers: [], sizes: [], formats: [], version: nil, rights_list: [], descriptions: [], geo_locations: []) # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists, Metrics/AbcSize
  self.namespace = NAMESPACE
  self.identifier = identifier
  self.creators = creators
  self.titles = titles
  self.publisher = publisher
  self.publication_year = publication_year
  self.subjects = subjects
  self.contributors = contributors
  self.dates = dates
  self.language = language
  self.resource_type = resource_type
  self.alternate_identifiers = alternate_identifiers
  self.related_identifiers = related_identifiers
  self.sizes = sizes
  self.formats = formats
  self.version = version
  self.rights_list = rights_list
  self.descriptions = descriptions
  self.geo_locations = geo_locations
end

Instance Attribute Details

#alternate_identifiersArray<AlternateIdentifier>

Returns an identifier or identifiers other than the primary Identifier applied to the resource being registered.

Returns:



170
# File 'lib/datacite/mapping/resource.rb', line 170

array_node :alternate_identifiers, 'alternateIdentifiers', 'alternateIdentifier', class: AlternateIdentifier, default_value: []

#contributorsArray<Contributor>

Returns institutions or persons responsible for collecting, creating, or otherwise contributing to the developement of the dataset.

Returns:

  • (Array<Contributor>)

    institutions or persons responsible for collecting, creating, or otherwise contributing to the developement of the dataset.



153
# File 'lib/datacite/mapping/resource.rb', line 153

array_node :contributors, 'contributors', 'contributor', class: Contributor, default_value: []

#creatorsArray<Creator>

Returns the main researchers involved working on the data, or the authors of the publication in priority order.

Returns:

  • (Array<Creator>)

    the main researchers involved working on the data, or the authors of the publication in priority order.



133
# File 'lib/datacite/mapping/resource.rb', line 133

array_node :creators, 'creators', 'creator', class: Creator

#datesArray<Date>

Returns different dates relevant to the work.

Returns:

  • (Array<Date>)

    different dates relevant to the work.



157
# File 'lib/datacite/mapping/resource.rb', line 157

array_node :dates, 'dates', 'date', class: Date, default_value: []

#descriptionsArray<Description>

Returns all additional information that does not fit in any of the other categories.

Returns:

  • (Array<Description>)

    all additional information that does not fit in any of the other categories.



194
# File 'lib/datacite/mapping/resource.rb', line 194

array_node :descriptions, 'descriptions', 'description', class: Description, default_value: []

#formatsArray<String>

Returns technical format of the resource, e.g. file extension or MIME type.

Returns:

  • (Array<String>)

    technical format of the resource, e.g. file extension or MIME type.



182
# File 'lib/datacite/mapping/resource.rb', line 182

array_node :formats, 'formats', 'format', class: String, default_value: []

#geo_locationsArray<GeoLocations>

Returns spatial region or named place where the data was gathered or about which the data is focused.

Returns:

  • (Array<GeoLocations>)

    spatial region or named place where the data was gathered or about which the data is focused.



198
# File 'lib/datacite/mapping/resource.rb', line 198

array_node :geo_locations, 'geoLocations', 'geoLocation', class: GeoLocation, default_value: []

#identifierIdentifier

Returns a persistent identifier that identifies a resource.

Returns:

  • (Identifier)

    a persistent identifier that identifies a resource.



129
# File 'lib/datacite/mapping/resource.rb', line 129

object_node :identifier, 'identifier', class: Identifier

#languageString

It's unclear from the spec whether language is required; to play it safe, if it's missing, we default to 'en'.

Returns:

  • (String)

    Primary language of the resource: an IETF BCP 47, ISO 639-1 language code.



162
163
164
# File 'lib/datacite/mapping/resource.rb', line 162

def language
  @language || 'en'
end

#publication_yearInteger

Returns year when the resource is made publicly available.

Returns:

  • (Integer)

    year when the resource is made publicly available.



145
# File 'lib/datacite/mapping/resource.rb', line 145

numeric_node :publication_year, 'publicationYear'

#publisherString

Returns the name of the entity that holds, archives, publishes prints, distributes, releases, issues, or produces the resource.

Returns:

  • (String)

    the name of the entity that holds, archives, publishes prints, distributes, releases, issues, or produces the resource.



141
# File 'lib/datacite/mapping/resource.rb', line 141

text_node :publisher, 'publisher'

Returns identifiers of related resources.

Returns:



174
# File 'lib/datacite/mapping/resource.rb', line 174

array_node :related_identifiers, 'relatedIdentifiers', 'relatedIdentifier', class: RelatedIdentifier, default_value: []

#resource_typeResourceType?

Returns the type of the resource. Optional.

Returns:

  • (ResourceType, nil)

    the type of the resource. Optional.



166
# File 'lib/datacite/mapping/resource.rb', line 166

object_node :resource_type, 'resourceType', class: ResourceType, default_value: nil

#rights_listArray<Rights>

Returns rights information for this resource.

Returns:

  • (Array<Rights>)

    rights information for this resource.



190
# File 'lib/datacite/mapping/resource.rb', line 190

array_node :rights_list, 'rightsList', 'rights', class: Rights, default_value: []

#sizesArray<String>

Returns unstructured size information about the resource.

Returns:

  • (Array<String>)

    unstructured size information about the resource.



178
# File 'lib/datacite/mapping/resource.rb', line 178

array_node :sizes, 'sizes', 'size', class: String, default_value: []

#subjectsArray<Subject>

Returns subjects, keywords, classification codes, or key phrases describing the resource.

Returns:

  • (Array<Subject>)

    subjects, keywords, classification codes, or key phrases describing the resource.



149
# File 'lib/datacite/mapping/resource.rb', line 149

array_node :subjects, 'subjects', 'subject', class: Subject, default_value: []

#titlesArray<Title>

Returns the names or titles by which a resource is known.

Returns:

  • (Array<Title>)

    the names or titles by which a resource is known.



137
# File 'lib/datacite/mapping/resource.rb', line 137

array_node :titles, 'titles', 'title', class: Title

#versionString

Returns version number of the resource. Optional.

Returns:

  • (String)

    version number of the resource. Optional.



186
# File 'lib/datacite/mapping/resource.rb', line 186

text_node :version, 'version', default_value: nil

Class Method Details

.allocate

Overrides Class.allocate, used by XML::Mapping on read, to make sure the namespace gets set even when we don't call the initializer



70
71
72
73
74
# File 'lib/datacite/mapping/resource.rb', line 70

def self.allocate
  res = super
  res.namespace = NAMESPACE
  res
end

Instance Method Details

#creator_affiliationsArray[Array[String]]

Convenience method to get the creators' affiliations. (Bear in mind that each creator can have multiple affiliations.)

Returns:

  • (Array[Array[String]])

    An array containing each creator's array of affiliations.



209
210
211
# File 'lib/datacite/mapping/resource.rb', line 209

def creator_affiliations
  creators.map(&:affiliations)
end

#creator_names[Array[String]] An array of the creators' names.

Convenience method to get the creators' names.

Returns:

  • ([Array[String]] An array of the creators' names.)

    [Array[String]] An array of the creators' names.



202
203
204
# File 'lib/datacite/mapping/resource.rb', line 202

def creator_names
  creators.map(&:name)
end

#funder_contribContributor?

Convenience method to get the funding contributor.

Returns:

  • (Contributor, nil)

    the contributor of type FUNDER, if any.



215
216
217
# File 'lib/datacite/mapping/resource.rb', line 215

def funder_contrib
  @funder_contrib ||= contributors.find { |c| c.type == ContributorType::FUNDER }
end

#funder_idNameIdentifier?

Convenience method to get the funding contributor identifier.

Returns:

  • (NameIdentifier, nil)

    the identifier of the funding contributor, if any.



227
228
229
# File 'lib/datacite/mapping/resource.rb', line 227

def funder_id
  funder_contrib.identifier if funder_contrib
end

#funder_id_valueString?

Convenience method to get the funding contributor identifier as a string.

Returns:

  • (String, nil)

    the string value of the funding contributor's identifier, if any.



233
234
235
# File 'lib/datacite/mapping/resource.rb', line 233

def funder_id_value
  funder_id.value if funder_id
end

#funder_nameString?

Convenience method to get the name of the funding contributor.

Returns:

  • (String, nil)

    the name of the funding contributor, if any.



221
222
223
# File 'lib/datacite/mapping/resource.rb', line 221

def funder_name
  funder_contrib.name if funder_contrib
end

#namespace_prefix=(prefix)

Sets the namespace prefix to be used when writing out XML (defaults to nil)

Parameters:

  • prefix (String, nil)

    The new prefix, or nil to use the default, unprefixed namespace



79
80
81
82
# File 'lib/datacite/mapping/resource.rb', line 79

def namespace_prefix=(prefix)
  old_namespace = namespace
  self.namespace = ::XML::MappingExtensions::Namespace.new(uri: old_namespace.uri, schema_location: old_namespace.schema_location, prefix: prefix)
end