lib/bolognese/readers/schema_org_reader.rb in bolognese-2.2.0 vs lib/bolognese/readers/schema_org_reader.rb in bolognese-2.3.0
- old
+ new
@@ -8,11 +8,13 @@
"isBasedOn" => "IsSupplementedBy",
"sameAs" => "IsIdenticalTo",
"isPartOf" => "IsPartOf",
"hasPart" => "HasPart",
"isPredecessor" => "IsPreviousVersionOf",
- "isSuccessor" => "IsNewVersionOf"
+ "isSuccessor" => "IsNewVersionOf",
+ "workTranslation" => "HasTranslation",
+ "translationOfWork" => "IsTranslationOf"
}
SO_TO_DC_REVERSE_RELATION_TYPES = {
"citation" => "IsReferencedBy",
"isBasedOn" => "IsSupplementTo",
@@ -72,10 +74,16 @@
# Authors should be an object, if it's just a plain string don't try and parse it.
if not authors.is_a?(String)
creators = get_authors(from_schema_org_creators(Array.wrap(authors)))
end
contributors = get_authors(from_schema_org_contributors(Array.wrap(meta.fetch("editor", nil))))
+ translators = get_authors(from_schema_org_contributors(Array.wrap(meta.fetch("translator", nil))))
+ translators.map! do |translator|
+ translator["contributorType"] = "Translator"
+ translator
+ end
+ contributors += translators
publisher = {
"name" => parse_attributes(meta.fetch("publisher", nil), content: "name", first: true),
"publisherIdentifier" => parse_attributes(meta.fetch("publisher", nil), content: "@id", first: true),
}.compact if meta.fetch("publisher", nil).present?
@@ -104,11 +112,13 @@
Array.wrap(schema_org_is_previous_version_of(meta)) +
Array.wrap(schema_org_is_new_version_of(meta)) +
Array.wrap(schema_org_references(meta)) +
Array.wrap(schema_org_is_referenced_by(meta)) +
Array.wrap(schema_org_is_supplement_to(meta)) +
- Array.wrap(schema_org_is_supplemented_by(meta))
+ Array.wrap(schema_org_is_supplemented_by(meta)) +
+ Array.wrap(schema_org_has_translation(meta)) +
+ Array.wrap(schema_org_is_translation_of(meta))
rights_list = Array.wrap(meta.fetch("license", nil)).compact.map do |rl|
hsh_to_spdx("__content__" => rl["name"], "rightsURI" => rl["id"])
end
@@ -125,10 +135,11 @@
end
dates = []
dates << { "date" => meta.fetch("datePublished"), "dateType" => "Issued" } if Date.edtf(meta.fetch("datePublished", nil)).present?
dates << { "date" => meta.fetch("dateCreated"), "dateType" => "Created" } if Date.edtf(meta.fetch("dateCreated", nil)).present?
dates << { "date" => meta.fetch("dateModified"), "dateType" => "Updated" } if Date.edtf(meta.fetch("dateModified", nil)).present?
+ dates << { "date" => meta.fetch("temporalCoverage"), "dateType" => "Coverage" } if Date.edtf(meta.fetch("temporalCoverage", nil)).present?
publication_year = meta.fetch("datePublished")[0..3] if meta.fetch("datePublished", nil).present?
if meta.fetch("inLanguage", nil).is_a?(String)
language = meta.fetch("inLanguage")
elsif meta.fetch("inLanguage", nil).is_a?(Object)
@@ -236,9 +247,17 @@
schema_org_reverse_related_identifier(meta, relation_type: "isBasedOn")
end
def schema_org_is_supplemented_by(meta)
schema_org_related_identifier(meta, relation_type: "isBasedOn")
+ end
+
+ def schema_org_has_translation(meta)
+ schema_org_related_identifier(meta, relation_type: "workTranslation", )
+ end
+
+ def schema_org_is_translation_of(meta)
+ schema_org_related_identifier(meta, relation_type: "translationOfWork")
end
end
end
end