lib/bolognese/readers/datacite_reader.rb in bolognese-1.6 vs lib/bolognese/readers/datacite_reader.rb in bolognese-1.6.2
- old
+ new
@@ -91,11 +91,11 @@
"schemaOrg" => schema_org,
"citeproc" => Bolognese::Utils::CR_TO_CP_TRANSLATIONS[resource_type.to_s.underscore.camelcase] || Bolognese::Utils::SO_TO_CP_TRANSLATIONS[schema_org] || "article",
"bibtex" => Bolognese::Utils::CR_TO_BIB_TRANSLATIONS[resource_type.to_s.underscore.camelcase] || Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[schema_org] || "misc",
"ris" => Bolognese::Utils::CR_TO_RIS_TRANSLATIONS[resource_type.to_s.underscore.camelcase] || Bolognese::Utils::DC_TO_RIS_TRANSLATIONS[resource_type_general.to_s.dasherize] || "GEN"
}.compact
-
+
titles = Array.wrap(meta.dig("titles", "title")).map do |r|
if r.blank?
nil
elsif r.is_a?(String)
{ "title" => sanitize(r) }
@@ -120,19 +120,21 @@
{ "rights" => r }
elsif r.is_a?(Hash)
{ "rights" => r["__content__"], "rightsUri" => normalize_url(r["rightsURI"]), "lang" => r["lang"] }.compact
end
end.compact
- subjects = Array.wrap(meta.dig("subjects", "subject")).map do |k|
- if k.blank?
- nil
- elsif k.is_a?(String)
- { "subject" => sanitize(k) }
- elsif k.is_a?(Hash)
- { "subject" => sanitize(k["__content__"]), "subjectScheme" => k["subjectScheme"], "schemeUri" => k["schemeURI"], "valueUri" => k["valueURI"], "lang" => k["lang"] }.compact
+
+ subjects = Array.wrap(meta.dig("subjects", "subject")).reduce([]) do |sum, subject|
+ if subject.is_a?(String)
+ sum += name_to_fos(subject)
+ elsif subject.is_a?(Hash)
+ sum += hsh_to_fos(subject)
end
- end.compact
+
+ sum
+ end.uniq
+
dates = Array.wrap(meta.dig("dates", "date")).map do |r|
if r.is_a?(Hash) && date = sanitize(r["__content__"]).presence
if Date.edtf(date).present? || Bolognese::Utils::UNKNOWN_INFORMATION.key?(date)
{ "date" => date,
"dateType" => parse_attributes(r, content: "dateType"),
@@ -162,16 +164,19 @@
end.compact
.map { |s| s.to_s.squish.presence }.compact
funding_references = Array.wrap(meta.dig("fundingReferences", "fundingReference")).compact.map do |fr|
scheme_uri = parse_attributes(fr["funderIdentifier"], content: "schemeURI")
funder_identifier = parse_attributes(fr["funderIdentifier"])
- funder_identifier = !funder_identifier.to_s.start_with?("https://","http://") && scheme_uri.present? ? normalize_id(scheme_uri + funder_identifier) : normalize_id(funder_identifier)
-
+ funder_identifier_type = parse_attributes(fr["funderIdentifier"], content: "funderIdentifierType")
+ if funder_identifier_type != "Other"
+ funder_identifier = !funder_identifier.to_s.start_with?("https://","http://") && scheme_uri.present? ? normalize_id(scheme_uri + funder_identifier) : normalize_id(funder_identifier)
+ end
+
{
"funderName" => fr["funderName"],
"funderIdentifier" => funder_identifier,
- "funderIdentifierType" => parse_attributes(fr["funderIdentifier"], content: "funderIdentifierType"),
+ "funderIdentifierType" => funder_identifier_type,
"awardNumber" => parse_attributes(fr["awardNumber"]),
"awardUri" => parse_attributes(fr["awardNumber"], content: "awardURI"),
"awardTitle" => fr["awardTitle"] }.compact
end
related_identifiers = Array.wrap(meta.dig("relatedIdentifiers", "relatedIdentifier")).map do |ri|
@@ -179,10 +184,10 @@
rid = validate_doi(ri["__content__"].to_s.downcase)
else
rid = ri["__content__"]
end
- {
+ {
"relatedIdentifier" => rid,
"relatedIdentifierType" => ri["relatedIdentifierType"],
"relationType" => ri["relationType"],
"resourceTypeGeneral" => ri["resourceTypeGeneral"],
"relatedMetadataScheme" => ri["relatedMetadataScheme"],