Gem Version Build Status Code Climate Pull Requests Commits since latest

RlatonBib is a Ruby gem that implements the BibliographicItem model.

Installation

Add this line to your application’s Gemfile:

gem 'relaton-bib'

And then execute:

$ bundle

Or install it yourself as:

$ gem install relaton-bib

Usage

Create bibliographic item

hash = YAML.load_file "spec/examples/bib_item.yml"
=> {"id"=>"ISOTC211",
 "title"=>["Geographic information", {"content"=>"Information géographique", "language"=>"fr", "script"=>"Latn"}],
 ...

item = RelatonBib::BibliographicItem.from_hash(hash)
=> #<RelatonBib::BibliographicItem:0x00007f962f030710
 @abstract=
  [#<RelatonBib::FormattedString:0x00007f962f02acc0
...

BibliographicItem Typed Title Strings

item.title
=> [#<RelatonBib::TypedTitleString:0x007fa49a360290
  @title=#<RelatonBib::FormattedString:0x007fa49a360088 @content="Geographic information", @format=nil, @language=["en"], @script=["Latn"]>,
  @type="main">,
 #<RelatonBib::TypedTitleString:0x007fa49a35bf38
  @title=#<RelatonBib::FormattedString:0x007fa49a35bdd0 @content="Information géographique", @format=nil, @language=["fr"], @script=["Latn"]>,
  @type=nil>]

item.title lang: "fr"
=> [#<RelatonBib::TypedTitleString:0x007fa49a35bf38
  @title=#<RelatonBib::FormattedString:0x007fa49a35bdd0 @content="Information géographique", @format=nil, @language=["fr"], @script=["Latn"]>,
  @type=nil>]

BibliographicItem Formatted Strings

item.abstract
=> #<RelatonBib::TypedTitleStringCollection:0x00007f962f0306c0
 @array=
  [#<RelatonBib::TypedTitleString:0x00007f95ee8a4298
    @title=#<RelatonBib::FormattedString:0x00007f95ee8a41a8 @content="Geographic information", @format="text/plain", @language=nil, @script=nil>,
    @type="title-main">,
   #<RelatonBib::TypedTitleString:0x00007f95ee8a4040
    @title=#<RelatonBib::FormattedString:0x00007f962f03bf70 @content="Geographic information", @format="text/plain", @language=nil, @script=nil>,
    @type="main">,
   #<RelatonBib::TypedTitleString:0x00007f962f030620
    @title=#<RelatonBib::FormattedString:0x00007f962f030580 @content="Information géographique", @format="text/plain", @language=["fr"], @script=["Latn"]>,
    @type=nil>]>

item.abstract(lang: "en").to_s
=> "ISO 19115-1:2014 defines the schema required for ..."

BibliographicItem references

item.shortref item.docidentifier.first
=> "TC211:2014"

XML serialization

item.to_xml
=> "<bibitem id="ISO/TC211" type="standard">
      <fetched>2019-04-30</fetched>
      <title type="main" language="en" script="Latn">Geographic information</title>
      <title language="fr" script="Latn">Information géographique</title>
      ...
    </bibitem>"

The default root element is bibitem. With argument bibdata: true the XML wrapped with bibdata element.

item.to_xml bibdata: true
=> "<bibdata type="standard">
      <fetched>2019-04-30</fetched>
      <title type="main" language="en" script="Latn">Geographic information</title>
      ...
    </bibdata>"

Date format

By default date elements are formatted as a year (yyyy). Option :date_format allows to output date elements in :short (yyyy-mm) and :full (yyyy-mm-dd) additional formats.

item.to_xml date_format: :short
=> "<bibitem id="ISO/TC211" type="standard">
      <fetched>2019-04-30</fetched>
      <title type="main" language="en" script="Latn">Geographic information</title>
      ...
      <date type="issued">
        <on>2014-01</on>
      </date>
      <date type="published">
        <on>2014-04</on>
      </date>
      <date type="accessed">
        <on>2015-05</on>
      </date>
      ...
    </bibitem>"

item.to_xml date_format: :full
=> "<bibitem id="ISO/TC211" type="standard">
      ...
      <date type="issued">
        <on>2014-01-01</on>
      </date>
      <date type="published">
        <on>2014-04-01</on>
      </date>
      <date type="accessed">
        <on>2015-05-20</on>
      </date>
      ...
    </bibitem>"

Adding notes

item.to_xml note: [{ text: "Note", type: "note" }]
=>"<bibitem id="ISO19115-1-2014">
  ...
  <note format="text/plain" type="note">Note</note>
  ...
</bibitem>"

Create bibliographic item form YAML

hash = YAML.load_file 'spec/examples/bib_item.yml'
=> {"id"=>"ISO/TC211",
...

RelatonBib::BibliographicItem.from_hash hash
=> #<RelatonBib::BibliographicItem:0x007ff1524f8c88
...

Create bibliographic item from BibXML

bibxml = File.read "spec/examples/rfc.xml"
=> <reference anchor=...

RelatonBib::BibXMLParser.parse bibxml
=> #<RelatonBib::BibliographicItem:0x00007f9d0c75b268
...

Export bibliographic item to Hash

item.to_hash
=> {"id"=>"ISOTC211",
 "title"=>
  [{"type"=>"main", "content"=>"Geographic information", "language"=>"en", "script"=>"Latn", "format"=>"text/plain"},
   {"content"=>"Information géographique", "language"=>"fr", "script"=>"Latn", "format"=>"text/plain"}],
  ...

Create bibliographic item from BibTeX

RelatonBib::BibtexParser.from_bibtex File.read('spec/examples/techreport.bib')
=> {"ISOTC211"=>
  #<RelatonBib::BibliographicItem:0x007fedee0a2ab0
  ...

Export bibliographic item to BibTeX

item.to_bibtex
@misc{ISOTC211,
  tile = {Geographic information},
  edition = {1},
  author = {Bierman, A. and Bierman, Forename},
  ...

Export bibliographic item to Citeproc

item.to_citeproc
=> [{"title"=>"Geographic information",
  "edition"=>"1",
  "author"=>[{"family"=>"Bierman", "given"=>"A."}, {"family"=>"Bierman", "given"=>"Forename"}],
  "publisher"=>"Institute of Electrical and Electronics Engineers",
  "publisher-place"=>"bib place",
  ...

Exporting bibliographic item to AsciiBib

item.to_asciibib
[%bibitem]
== {blank}
id:: ISOTC211
fetched:: 2020-08-19
title::
title.type:: title-main
title.content:: Geographic information
title.format:: text/plain
...

Export bibliographic item to BibXML (RFC)

item.to_bibxml
<reference anchor="ISO.TC.211" target="https://www.iso.org/standard/53798.html">
  <front>
    <title>Geographic information</title>
    <author>
      <organization abbrev="ISO">International Organization for Standardization</organization>
    </author>
    <author fullname="A. Bierman">
      <organization abbrev="IETF">IETF</organization>
      <address>
        <postal>
          <city>City</city>
          <code>123456</code>
          <country>Country</country>
          <region>State</region>
          <street>Street</street>
        </postal>
        <phone>223322</phone>
      </address>
    </author>
    <author role="editor">
      <organization abbrev="IEEE">IEEE</organization>
    </author>
    <author fullname="Forename Bierman" initials="A." surname="Bierman">
      <organization abbrev="IETF">IETF</organization>
      <address>
        <postal>
          <city>City</city>
          <code>123456</code>
          <country>Country</country>
          <region>State</region>
          <street>Street</street>
        </postal>
        <phone>223322</phone>
      </address>
    </author>
    <author>
      <organization>W3C</organization>
    </author>
    <date year="2014" month="April"/>
    <workgroup>Editorial group</workgroup>
    <abstract>
      <t>ISO 19115-1:2014 defines the schema required for ...</t>
    </abstract>
  </front>
  <seriesInfo name="DOI" value="10.17487/rfc1149"/>
  <seriesInfo name="Internet-Draft" value="draft-ietf-somewg-someprotocol-07"/>
  <seriesInfo name="ISO/IEC FDIS 10118-3" value="serie1234"/>
  <seriesInfo name="Formattedref"/>
  <seriesInfo name="Journal" value="7"/>
  <seriesInfo name="Series"/>
  <seriesInfo name="RFC" value="4"/>
</reference>

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to [rubygems.org](https://rubygems.org).

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/metanorma/relaton-bib.

License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).