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
item = RelatonBib::BibliographicItem.new(
id: "ISOTC211", fetched: Date.today.to_s,
title: [
{ type: "main", content: "Geographic information", language: "en", script: "Latn" },
{
content: "Information géographique", language: "fr", script: "Latn"
},
],
type: "standard",
docid: [
RelatonBib::DocumentIdentifier.new(id: "TC211", type: "ISO"),
RelatonBib::DocumentIdentifier.new(id: "ISBN", type: "isbn"),
RelatonBib::DocumentIdentifier.new(id: "LCCN", type: "lccn"),
RelatonBib::DocumentIdentifier.new(id: "ISSN", type: "issn"),
],
docnumber: "123456",
edition: "1", language: %w[en fr], script: ["Latn"],
version: RelatonBib::BibliographicItem::Version.new("2019-04-01", ["draft"]),
biblionote: [
RelatonBib::BiblioNote.new(content: "note"),
RelatonBib::BiblioNote.new(content: "An note", type: "annote"),
RelatonBib::BiblioNote.new(content: "How published", type: "howpublished"),
RelatonBib::BiblioNote.new(content: "Comment", type: "comment"),
RelatonBib::BiblioNote.new(content: "Table Of Contents", type: "tableOfContents"),
],
docstatus: RelatonBib::DocumentStatus.new(
stage: "stage", substage: "substage", iteration: "final",
),
date: [
{ type: "issued", on: "2014" },
{ type: "published", on: "2014-04" },
{ type: "accessed", on: "2015-05-20" },
],
abstract: [
{ content: "ISO 19115-1:2014 defines the schema required for ...",
language: "en", script: "Latn", format: "text/plain" },
{ content: "L'ISO 19115-1:2014 définit le schéma requis pour ...",
language: "fr", script: "Latn", format: "text/plain" },
],
contributor: [
{
entity: {
name: "International Organization for Standardization",
url: "www.iso.org", abbreviation: "ISO", subdivision: "division",
},
role: [{ type: "publisher", description: ["Publisher role"] }],
},
{
entity: RelatonBib::Person.new(
name: RelatonBib::FullName.new(
completename: RelatonBib::LocalizedString.new("A. Bierman", "en"),
),
affiliation: [RelatonBib::Affiliation.new(
organization: RelatonBib::Organization.new(
name: "IETF",
abbreviation: RelatonBib::LocalizedString.new("IETF"),
identifier: [RelatonBib::OrgIdentifier.new("uri", "www.ietf.org")],
)
)],
contact: [
RelatonBib::Address.new(
street: ["Street"], city: "City", postcode: "123456",
country: "Country", state: "State"
),
RelatonBib::Contact.new(type: "phone", value: "223322"),
]
),
role: [type: "author"],
},
RelatonBib::ContributionInfo.new(
entity: RelatonBib::Organization.new(
name: "IETF",
abbreviation: "IETF",
identifier: [RelatonBib::OrgIdentifier.new("uri", "www.ietf.org")],
),
role: [type: "publisher"],
),
{
entity: RelatonBib::Person.new(
name: RelatonBib::FullName.new(
initial: [RelatonBib::LocalizedString.new("A.", "en")],
surname: RelatonBib::LocalizedString.new("Bierman", "en"),
forename: [RelatonBib::LocalizedString.new("Forename", "en")],
addition: [RelatonBib::LocalizedString.new("Addition", "en")],
prefix: [RelatonBib::LocalizedString.new("Prefix", "en")],
),
affiliation: [RelatonBib::Affiliation.new(
organization: RelatonBib::Organization.new(name: "IETF", abbreviation: "IETF"),
description: [RelatonBib::LocalizedString.new("Description", "en")]
)],
contact: [
RelatonBib::Address.new(
street: ["Street"], city: "City", postcode: "123456",
country: "Country", state: "State"
),
RelatonBib::Contact.new(type: "phone", value: "223322"),
],
identifier: [RelatonBib::PersonIdentifier.new("uri", "www.person.com")],
),
role: [type: "author"],
},
{ entity: { name: "Institution" }, role: [type: "sponsor"] }
],
copyright: { owner: {
name: "International Organization for Standardization",
abbreviation: "ISO", url: "www.iso.org"
}, from: "2014", to: "2020" },
link: [
{ type: "src", content: "https://www.iso.org/standard/53798.html" },
{ type: "obp",
content: "https://www.iso.org/obp/ui/#!iso:std:53798:en" },
{ type: "rss", content: "https://www.iso.org/contents/data/standard"\
"/05/37/53798.detail.rss" },
{ type: "doi", content: "http://standrd.org/doi-123" },
{ type: "file", content: "file://path/file" },
],
relation: [
{
type: "updates",
bibitem: RelatonBib::BibliographicItem.new(
formattedref: RelatonBib::FormattedRef.new(content: "ISO 19115:2003"),
),
locality: [
RelatonBib::LocalityStack.new([
RelatonBib::Locality.new("volume", "1"),
RelatonBib::Locality.new("section", "2"),
]),
],
source_locality: [
RelatonBib::SourceLocalityStack.new([
RelatonBib::SourceLocality.new("chapter", "4"),
]),
],
},
{
type: "updates",
bibitem: RelatonBib::BibliographicItem.new(
type: "standard",
formattedref: RelatonBib::FormattedRef.new(content: "ISO 19115:2003/Cor 1:2006"),
),
},
{
type: "partOf",
bibitem: RelatonBib::BibliographicItem.new(
title: [RelatonBib::TypedTitleString.new(type: "main", content: "Book title")],
),
},
],
series: [
RelatonBib::Series.new(
type: "main",
title: RelatonBib::TypedTitleString.new(
type: "original", content: "ISO/IEC FDIS 10118-3", language: "en",
script: "Latn", format: "text/plain",
),
place: "Serie's place",
organization: "Serie's organization",
abbreviation: RelatonBib::LocalizedString.new("ABVR"),
from: "2009-02-01",
to: "2010-12-20",
number: "serie1234",
partnumber: "part5678",
),
RelatonBib::Series.new(
type: "alt",
formattedref: RelatonBib::FormattedRef.new(
content: "serieref", language: "en", script: "Latn",
),
),
RelatonBib::Series.new(
type: "journal", title: RelatonBib::TypedTitleString.new(content: "Journal"), number: "7"
),
RelatonBib::Series.new(title: RelatonBib::TypedTitleString.new(content: "Series")),
],
medium: RelatonBib::Medium.new(
form: "medium form", size: "medium size", scale: "medium scale",
),
place: [
"bib place",
RelatonBib::Place.new(name: "Geneva", uri: "geneva.place", region: "Switzelznd")
],
extent: [
RelatonBib::BibItemLocality.new("section", "Reference from", "Reference to"),
RelatonBib::BibItemLocality.new("chapter", "4"),
RelatonBib::BibItemLocality.new("page", "10", "20"),
RelatonBib::BibItemLocality.new("volume", "1"),
],
accesslocation: ["accesslocation1", "accesslocation2"],
classification: [
RelatonBib::Classification.new(type: "type", value: "value"),
RelatonBib::Classification.new(type: "keyword", value: "Keywords"),
RelatonBib::Classification.new(type: "mendeley", value: "Mendeley Tags"),
],
validity: RelatonBib::Validity.new(
begins: Time.new(2010, 10, 10, 12, 21),
ends: Time.new(2011, 2, 3, 18,30),
revision: Time.new(2011, 3, 4, 9, 0),
)
)
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>]
BibliographicItem Formatted Strings
item.abstract
=> [#<RelatonBib::FormattedString:0x007fa49a35aed0 @content="ISO 19115-1:2014 defines the schema required for ...", @format="text/plain", @language=["en"], @script=["Latn"]>,
#<RelatonBib::FormattedString:0x007fa49a35ae08 @content="L'ISO 19115-1:2014 définit le schéma requis pour ...", @format="text/plain", @language=["fr"], @script=["Latn"]>]
item.abstract(lang: "en").to_s
=> "ISO 19115-1:2014 defines the schema required for ..."
BibliographicItem references
item.shortref item
=> "ISO/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>"
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 year (yyyy). Option :date_format
allows to output date elements in :short
(yyyy-mm) and :full
(yyyy-mm-dd) additiona 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>
...
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>
...
Create bibliographic item form YAML
hash = YAML.load_file 'spec/examples/bib_item.yml'
=> {"id"=>"ISO/TC211",
...
bib_hash = RelatonBib::HashConverter.hash_to_bib hash
=> {:id=>"ISO/TC211",
...
RelatonBib::BibliographicItem.new bib_hash
=> #<RelatonBib::BibliographicItem:0x007ff1524f8c88
...
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/bibitem.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},
...
Exporting bibliographic item to AsciiBib
item.to_asciibib
[%bibitem]
== {blank}
id:: ISOTC211
fetched:: 2020-08-19
title::
title.type:: title-main
title.conten:: Geographic information
title.format:: text/plain
...
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).