= RelatonIsoBib image:https://img.shields.io/gem/v/relaton-iso-bib.svg["Gem Version", link="https://rubygems.org/gems/relaton-iso-bib"] image:https://github.com/relaton/relaton-iso-bib/workflows/macos/badge.svg["Build Status (macOS)", link="https://github.com/relaton/relaton-iso-bib/actions?workflow=macos"] image:https://github.com/relaton/relaton-iso-bib/workflows/windows/badge.svg["Build Status (Windows)", link="https://github.com/relaton/relaton-iso-bib/actions?workflow=windows"] image:https://github.com/relaton/relaton-iso-bib/workflows/ubuntu/badge.svg["Build Status (Ubuntu)", link="https://github.com/relaton/relaton-iso-bib/actions?workflow=ubuntu"] image:https://codeclimate.com/github/relaton/relaton-iso-bib/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/relaton/relaton-iso-bib"] image:https://img.shields.io/github/issues-pr-raw/relaton/relaton-iso-bib.svg["Pull Requests", link="https://github.com/relaton/relaton-iso-bib/pulls"] image:https://img.shields.io/github/commits-since/relaton/relaton-iso-bib/latest.svg["Commits since latest",link="https://github.com/relaton/relaton-iso-bib/releases"] IsoBib is a Ruby gem that implements the https://github.com/metanorma/metanorma-model-iso#iso-bibliographic-item[IsoBibliographicItem model]. == Installation Add this line to your application's Gemfile: [source,ruby] ---- gem 'relaton-iso-bib' ---- And then execute: $ bundle Or install it yourself as: $ gem install relaton-iso-bib == Usage === Create ISO bibliographic item [source,ruby] ---- item = RelatonIsoBib::IsoBibliographicItem.new( fetched: "2018-10-21", structuredidentifier: RelatonIsoBib::StructuredIdentifier.new( type: "sid", project_number: "ISO 1-2:2014", part: 2, subpart: 2, ), docnumber: "123456", title: [ { type: "title-intro", content: "Metadata", language: "en", script: "Latn" }, { type: "title-main", content: "Geographic information", language: "en", script: "Latn" }, { type: "title-part", content: "Part 1: Fundamentals", language: "en", script: "Latn" }, { type: "main", content: "Metadata - Geographic information - Part 1: Fundamentals", language: "en", script: "Latn" }, { type: "title-intro", content: "Métadonnées", language: "fr", script: "Latn" }, { type: "title-main", content: "Information géographique", language: "fr", script: "Latn" }, { type: "title-part", content: "Partie 1: Principes de base", language: "fr", script: "Latn" }, { type: "main", content: "Information géographique - Métadonnées - Partie 1: Principes de base", language: "fr", script: "Latn" }, ], edition: "1", version: RelatonBib::BibliographicItem::Version.new("2019-04-01", ["draft"]), language: %w[en fr], script: ["Latn"], type: "international-standard", docstatus: RelatonBib::DocumentStatus.new(stage: "60", substage: "60"), date: [{ type: "published", on: "2014-04" }], 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" }, role: [type: "publisher"] }, { entity: RelatonBib::Person.new( name: RelatonBib::FullName.new( completename: RelatonBib::LocalizedString.new("John Smith"), ), ), role: [type: "author"], }, ], copyright: [{ owner: [{ name: "International Organization for Standardization", abbreviation: "ISO", url: "www.iso.org" }], from: "2014" }], 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" }, ], relation: [ RelatonBib::DocumentRelation.new( type: "updates", bibitem: RelatonIsoBib::IsoBibliographicItem.new( formattedref: RelatonBib::FormattedRef.new(content: "ISO 19115:2003"), docstatus: RelatonBib::DocumentStatus.new(stage: "60", substage: "60"), ), locality: [ RelatonBib::BibItemLocality.new("updates", "Reference form"), ], ), RelatonBib::DocumentRelation.new( type: "updates", bibitem: RelatonIsoBib::IsoBibliographicItem.new( type: "international-standard", formattedref: RelatonBib::FormattedRef.new(content: "ISO 19115:2003/Cor 1:2006"), ), ), ], series: [ RelatonBib::Series.new( type: "main", title: RelatonBib::TypedTitleString.new( type: "title-main", content: "ISO/IEC FDIS 10118-3", language: "en", script: "Latn", ), place: "Serie's place", organization: "Serie's organization", abbreviation: RelatonBib::LocalizedString.new("ABVR", "en", "Latn"), 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", ), ) ], medium: RelatonBib::Medium.new( form: "medium form", size: "medium size", scale: "medium scale", ), place: ["bib place"], extent: [ RelatonBib::BibItemLocality.new( "section", "Reference from", "Reference to" ), ], accesslocation: ["accesslocation1", "accesslocation2"], classification: [RelatonBib::Classification.new(type: "type", value: "value")], 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), ), editorialgroup: { technical_committee: [{ name: " ISO/TC 211 Geographic information/Geomatics", type: "technicalCommittee", number: 211 }], subcommittee: [{ name: "International Organization for Standardization", type: "ISO", number: 122, }], workgroup: [RelatonIsoBib::IsoSubgroup.new( name: "Workgroup Organization", type: "WG", number: 111, )], }, ics: [{ field: 35, group: 240, subgroup: 70 }], ) => #, ... ---- === IsoBibliographicItem Localized Strings [source,ruby] ---- item.title => [#, @type="title-intro">, #, @type="title-main">, #, @type="title-part">, #, @type="main">, #, @type="title-intro">, #, @type="title-main">, #, @type="title-part">, #, @type="main">] item.title(lang: "en") => [#, @type="title-intro">, #, @type="title-main">, #, @type="title-part">, #, @type="main">] item.abstract(lang: "en").to_s => "ISO 19115-1:2014 defines the schema required for ..." ---- === IsoBibliographicItem references [source,ruby] ---- item.shortref(item.structuredidentifier) => "ISO1-2-2014" ---- === IsoBibliographicItem URLs [source,ruby] ---- item.url => "https://www.iso.org/standard/53798.html" item.url(:obp) => "https://www.iso.org/obp/ui/#!iso:std:53798:en" item.url(:rss) => "https://www.iso.org/contents/data/standard/05/37/53798.detail.rss" ---- === IsoBibliographicItem ICS [source,ruby] ---- item.ics [], @subgroupcode="70">] ---- === IsoBibliographicItem BibliographicDates [source,ruby] ---- item.date => [#, @to=nil, @type="published">] item.date.filter(type: "published").first.on => # ---- === IsoBibliographicItem DocumentStatus [source,ruby] ---- item.status => #, @substage=#> ---- [source,ruby] ---- wg = item.editorialgroup => #], @technical_committee=[#], @workgroup=[#]> ---- === Document relations of a standard [source,ruby] ---- item.relation => # # [#, @type="title-intro">, #, @type="title-main">, #, @type="main">] all_arts_item.shortref(item.structuredidentifier) => "ISO1(allparts):2014: All Parts" all_arts_item.relation.last.bibitem.title => [#, @type="title-intro">, #, @type="title-main">, #, @type="title-part">, #, @type="main">, #, @type="title-intro">, #, @type="title-main">, #, @type="title-part">, #, @type="main">] ---- === Reference modification: convert to most recent reference In ISO, an undated reference is interpreted as a _de dicto_ reference to the most recent instance of the reference; if the document is read after a new version of the reference has been issued, the reference is taken to refer to that new instance, even if that instance had not been published at the time the bibliography was authored. All references on the ISO web site (as retrieved by the isobib gem) are dated. A dated reference is converted to a Most Recent referece by making the dated reference an instance relation to a new reference, which strips the date of publication of the original, and its abstract. The operation is destructive. [source,ruby] ---- all_parts_item.date => [#, @to=nil, @type="published">] most_recent_ref_item = all_parts_item.to_most_recent_reference most_recent_ref_item.date => [] most_recent_ref_item.shortref(most_recent_ref_item.structuredidentifier) => "ISO1(allparts): All Parts" ---- === XML serialization [source,ruby] ---- item.to_xml(bibdata: true) => " 2018-10-21 Metadata Geographic information Part 1: Fundamentals Metadata - Geographic information - Part 1: Fundamentals ... " item.to_xml(bibdata: true, note: [{ type: "note type", text: "test note" }]) => " 2018-10-21 Metadata ... test note ... " ---- === Export bibliographic item to BibTeX [source,ruby] ---- item.to_bibtex => "@international-standard{john2014a, tile = {Information géographique - Métadonnées - Partie 1: Principes de base}, edition = {1}, author = {Smith, John}, publisher = {International Organization for Standardization}, address = {bib place}, year = {2014}, month = apr, type = {value}, timestamp = {2018-10-21}, url = {https://www.iso.org/standard/53798.html}, month_numeric = {4} }" ---- === Exporting bibliographic item to AsciiBib [source,ruby] ---- item.to_asciibib => "[%bibitem] == {blank} id:: ISOTC211 fetched:: 2020-08-19 title:: title.type:: title-intro title.content:: Metadata title.language:: en title.script:: Latn title.format:: text/plain itle:: title.type:: title-main title.conten:: Geographic information ..." ---- === Create bibliographic item form YAML [source,ruby] ---- hash = YAML.load_file 'spec/examples/iso_bib_item.yml' => {"id"=>"ISO/TC211", ... bib_hash = RelatonIsoBib::HashConverter.hash_to_bib hash => {:id=>"ISO/TC211", ... RelatonIsoBib::IsoBibliographicItem.new bib_hash => #