Module: Bolognese::Writers::JatsWriter

Included in:
MetadataUtils
Defined in:
lib/bolognese/writers/jats_writer.rb

Instance Method Summary collapse

Instance Method Details

#dateObject



123
124
125
# File 'lib/bolognese/writers/jats_writer.rb', line 123

def date
  get_date_parts(date_published)
end

#insert_authors(xml) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/bolognese/writers/jats_writer.rb', line 41

def insert_authors(xml)
  if creators.present?
    xml.send("person-group", "person-group-type" => "author") do
      Array.wrap(creators).each do |au|
        xml.name do
          insert_contributor(xml, au)
        end
      end
    end
  end
end

#insert_citation(xml) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/bolognese/writers/jats_writer.rb', line 14

def insert_citation(xml)
  insert_authors(xml)
  insert_editors(xml)
  insert_citation_title(xml) if is_article? || is_data? || is_chapter?
  insert_source(xml)
  insert_publisher_name(xml) if publisher.present? && !is_data?
  insert_publication_date(xml)
  insert_volume(xml) if container.to_h["volume"].present?
  insert_issue(xml) if container.to_h["issue"].present?
  insert_fpage(xml) if container.to_h["firstPage"].present?
  insert_lpage(xml) if container.to_h["lastPage"].present?
  insert_version(xml) if version_info.present?
  insert_pub_id(xml)
end

#insert_citation_title(xml) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/bolognese/writers/jats_writer.rb', line 70

def insert_citation_title(xml)
  case publication_type.fetch('publication-type', nil)
  when "data" then xml.send("data-title", parse_attributes(titles, content: "title", first: true))
  when "journal" then xml.send("article-title", parse_attributes(titles, content: "title", first: true))
  when "chapter" then xml.send("chapter-title", parse_attributes(titles, content: "title", first: true))
  end
end

#insert_contributor(xml, person) ⇒ Object



65
66
67
68
# File 'lib/bolognese/writers/jats_writer.rb', line 65

def insert_contributor(xml, person)
  xml.surname(person["familyName"]) if person["familyName"].present?
  xml.send("given-names", person["givenName"]) if person["givenName"].present?
end

#insert_editors(xml) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/bolognese/writers/jats_writer.rb', line 53

def insert_editors(xml)
  if contributors.present?
    xml.send("person-group", "person-group-type" => "editor") do
      Array.wrap(contributors).each do |con|
        xml.name do
          insert_contributor(xml, con)
        end
      end
    end
  end
end

#insert_fpage(xml) ⇒ Object



106
107
108
# File 'lib/bolognese/writers/jats_writer.rb', line 106

def insert_fpage(xml)
  xml.fpage(container["firstPage"])
end

#insert_issue(xml) ⇒ Object



102
103
104
# File 'lib/bolognese/writers/jats_writer.rb', line 102

def insert_issue(xml)
  xml.issue(container["issue"])
end

#insert_lpage(xml) ⇒ Object



110
111
112
# File 'lib/bolognese/writers/jats_writer.rb', line 110

def insert_lpage(xml)
  xml.lpage(container["lastPage"])
end

#insert_pub_id(xml) ⇒ Object



118
119
120
121
# File 'lib/bolognese/writers/jats_writer.rb', line 118

def insert_pub_id(xml)
  return nil unless doi.present?
  xml.send("pub-id", doi, "pub-id-type" => "doi")
end

#insert_publication_date(xml) ⇒ Object



90
91
92
93
94
95
96
# File 'lib/bolognese/writers/jats_writer.rb', line 90

def insert_publication_date(xml)
  year, month, day = get_date_parts(get_date(dates, "Issued")).to_h.fetch("date-parts", []).first

  xml.year(year, "iso-8601-date" => get_date(dates, "Issued"))
  xml.month(month.to_s.rjust(2, '0')) if month.present?
  xml.day(day.to_s.rjust(2, '0')) if day.present?
end

#insert_publisher_name(xml) ⇒ Object



86
87
88
# File 'lib/bolognese/writers/jats_writer.rb', line 86

def insert_publisher_name(xml)
  xml.send("publisher-name", publisher)
end

#insert_source(xml) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/bolognese/writers/jats_writer.rb', line 78

def insert_source(xml)
  if is_article? || is_data? || is_chapter?
    xml.source(container && container["title"] || publisher)
  else
    xml.source(parse_attributes(titles, content: "title", first: true))
  end
end

#insert_version(xml) ⇒ Object



114
115
116
# File 'lib/bolognese/writers/jats_writer.rb', line 114

def insert_version(xml)
  xml.version(version_info)
end

#insert_volume(xml) ⇒ Object



98
99
100
# File 'lib/bolognese/writers/jats_writer.rb', line 98

def insert_volume(xml)
  xml.volume(container["volume"])
end

#is_article?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/bolognese/writers/jats_writer.rb', line 29

def is_article?
  publication_type.fetch('publication-type', nil) == "journal"
end

#is_chapter?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/bolognese/writers/jats_writer.rb', line 37

def is_chapter?
  publication_type.fetch('publication-type', nil) == "chapter"
end

#is_data?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/bolognese/writers/jats_writer.rb', line 33

def is_data?
  publication_type.fetch('publication-type', nil) == "data"
end

#jatsObject



6
7
8
9
10
11
12
# File 'lib/bolognese/writers/jats_writer.rb', line 6

def jats
  @jats ||= Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
    xml.send("element-citation", publication_type) do
      insert_citation(xml)
    end
  end.to_xml
end

#publication_typeObject



127
128
129
# File 'lib/bolognese/writers/jats_writer.rb', line 127

def publication_type
  { 'publication-type' => Bolognese::Utils::CR_TO_JATS_TRANSLATIONS[types["resourceType"]] || Bolognese::Utils::SO_TO_JATS_TRANSLATIONS[types["schemaOrg"]] }.compact
end